Blog ·
El verbo a cuatro palabras de distancia
Cambiar un pronombre neerlandés reescribe verbos que no toca. Una tabla de 84 palabras que aborta ante lo que no conoce, y concordancia a cuatro palabras.
Por Provibr
El neerlandés tiene dos maneras de dirigirse a un lector. u es formal y je es informal, y la elección no es una simple cuestión de cortesía: cambia el verbo y, a diferencia del equivalente francés o alemán, la forma que sale depende de dónde esté el verbo. Este sitio había ido derivando hacia usar las dos, así que nos decidimos por je y lo convertimos todo. Eso son dos conversiones, porque el texto neerlandés vive en dos sitios que no tienen nada en común: 102 artículos en markdown y un catálogo de mensajes con 18841 claves. La medición previa a la primera conversión: 445 pronombres formales en 44 de los 102 artículos, con 362 simples, 82 posesivos y uno reflexivo. Los otros 58 ya eran informales.
Si se tratara de un idioma en el que un pronombre solo es un pronombre, todo esto sería una única orden de sustitución. No lo es, y los fallos interesantes vienen todos de ahí.
La tabla que se saltaba cosas en silencio
El neerlandés invierte el sujeto y el verbo en una pregunta o tras un elemento antepuesto, y al hacerlo desaparece la terminación verbal. kunt u se convierte en kun je, no en kunt je. Que la terminación desaparezca o no depende de la raíz: zet u se queda en zet je, pero schrijft u pasa a schrijf je.
Así que el script necesita saber, para cada palabra que puede ir delante del pronombre, qué le pasa a esa palabra. La primera versión tenía una tabla con los verbos que yo había visto en una muestra, y dejaba todo lo demás tal cual. Eso hizo que Duwt u creditnota's pasara a Duwt je creditnota's y que Verlaagt u een tijdstempel pasara a Verlaagt je een tijdstempel. Las dos formas mal, las dos con aspecto gramatical y las dos completamente en silencio. El script informó de que había ido bien.
Es el mismo fallo que ya mordió a este código en un terreno completamente distinto: una guarda que recorría el árbol sintáctico de nuestro propio código ligaba una clase de declaración de variable y se saltaba todas las demás, de modo que informaba de miles de claves de traducción cubiertas mientras estaba ciega ante el patrón que usa el panel entero. Una tabla que se salta en silencio una forma desconocida parece completa y no lo está.
La tabla contiene ahora las 84 palabras que aparecen realmente delante de un pronombre formal, contadas sobre el corpus y no de memoria, y una palabra desconocida es código de salida 1. De las 84, 51 no cambian nada: conjunciones, pronombres relativos y preposiciones, delante de las cuales el pronombre es sencillamente el sujeto o el objeto. Dos tercios de la tabla existen únicamente para que el tercio que importa no pueda esconderse detrás de un valor por defecto.
Tres errores que solo encontró la lectura
Una vez que la tabla fue exhaustiva, tres frases seguían estando mal después de la ejecución, y ninguna de ellas es un problema de tabla. tegen u kan liegen se había convertido en tegen je kan liegen donde debería ser tegen jou kunt liegen: ahí el pronombre es el objeto de una preposición y pasa a la forma tónica. van u uw se había convertido en van je uw, porque la primera pasada consumió la posición que necesitaba una pasada posterior. Y u zich se había convertido en je zich, cuando el reflexivo del pronombre informal es je je.
Cada uno de esos casos exige tener en la cabeza una oración entera. Ninguna pasada sobre una ventana de dos o tres palabras puede producirlos, y ninguna prueba que compare recuentos de palabras se daría cuenta.
Concordancia a distancia
El hallazgo de la ronda es una frase que es correcta con el pronombre formal y errónea con el informal, y las dos palabras implicadas están a cuatro palabras de distancia.
als u die heeft ingesteld está bien. als je die heeft ingesteld está mal; tiene que ser hebt. El pronombre y el verbo concuerdan, y die está sentado entre ambos, así que una pasada que exige que el verbo siga directamente al pronombre no ve absolutamente nada. La pasada que actuó aquí fue la que cambia el pronombre, y no tiene ningún motivo para mirar más adelante en la oración.
La comprobación que cierra esto es una expresión regular sobre el texto ya terminado: el pronombre informal, hasta cuatro palabras intermedias y después uno de exactamente tres verbos. Toda coincidencia tiene que leerla una persona, y lo que se ha leído y aprobado queda por escrito con su motivo; una coincidencia nueva es código de salida 1.
Exactamente tres verbos, porque son los únicos cuya forma de segunda persona difiere entre los dos registros. Los cinco vecinos evidentes son idénticos en ambos, e incluirlos producía cuatro coincidencias que nunca podrían ser un defecto. Una comprobación que produce líneas sobre las que nadie tiene que actuar es una comprobación que la gente deja de leer.
Hasta cuatro palabras, porque es lo que contiene el corpus y porque un hueco sin límite cruza las fronteras de la oración. Seis de las diez coincidencias sobre el catálogo terminado eran correctas precisamente porque el verbo tenía otro sujeto.
Dos guardas, porque el enmascarado no se puede compartir
Los dos cuerpos de texto tienen ahora una comprobación permanente, y son ficheros separados.
El motivo es que encontrar el texto corrido es un problema distinto en cada uno. En markdown se enmascaran los bloques de código, el código en línea y los destinos de los enlaces. En un catálogo de mensajes se enmascaran el nombre del argumento, la palabra de estilo, las etiquetas de las ramas y las etiquetas de texto enriquecido de la sintaxis de marcadores, conservando el texto que hay dentro de una rama, porque ese texto es neerlandés y un pronombre ahí cuenta. Ese enmascarado es un recorrido de llaves y no una expresión regular, por el mismo motivo por el que lo es la guarda de marcadores que tiene al lado: una rama cuyo texto es una sola palabra tiene exactamente el mismo aspecto que un argumento.
Lo que las dos guardas sí comparten es una regla, y vive en un solo fichero para que no puedan divergir: un pronombre en mayúscula solo cuenta al principio de una frase.
Esa regla es una medición, no una comodidad. En los artículos, diez coincidencias sueltas sobreviven a la conversión y las diez están en medio de una frase: cinco son unidades de rack del capítulo del centro de datos y cinco son la letra en sí, de un alfabeto que la omite a propósito. En el catálogo hay 61, con 54 en medio de una frase, seis como etiqueta y una como unidad dentro del nombre de un campo. Las 61 se leyeron y ninguna es un pronombre. Escribir eso como una lista de nombres de fichero se habría dejado fuera la segunda grafía de la misma idea; escribirlo como una forma captura las dos.
El indicador de insensibilidad a mayúsculas de ese patrón se olvidó una vez, lo que dejaba invisible un pronombre en mayúscula al principio de una frase: exactamente la forma que aparece en un encabezado o después de un punto. Una prueba sonda con casos conocidos lo detectó de inmediato. Una guarda sin sonda es una guarda en la que se confía en lugar de comprobarla.
Dos maneras de estar en verde por vacío
Verificar la conversión del catálogo en un navegador produjo dos falsos verdes, y son la mitad transferible de esta ronda.
Una página detrás de un interruptor de despliegue responde con una página de error, y una página de error no contiene ningún pronombre formal. Dos pantallas del panel están cerradas así y el análisis informó de cero hallazgos en ambas, lo que se lee igual que una página limpia. Lo que lo hizo visible fue una cota inferior sobre el número de caracteres: la respuesta cerrada tenía 173 caracteres, y con los interruptores encendidos esas mismas dos pantallas tenían 1335 y 557. El análisis de una página vacía y el análisis de una página limpia son el mismo número.
Y el servidor de desarrollo cachea el catálogo. La primera ejecución rota a propósito, la que debe ponerse en rojo para saber que la comprobación funciona, salió en verde, porque el fichero intercambiado solo se servía tras un reinicio. Una prueba en rojo que sale verde por un motivo ajeno es peor que no tener prueba en rojo: certifica la comprobación.
Lo que dejaríamos por escrito
- Un pronombre en una lengua flexiva no es una cadena. Cambiarlo reescribe palabras que no toca.
- Una tabla exhaustiva es mejor que una muestreada, y la diferencia solo se ve cuando aborta ante lo que no conoce.
- Dos tercios de una buena tabla pueden no hacer nada. Existen para que el resto no pueda esconderse detrás de un valor por defecto.
- Una ventana de dos palabras no puede ver una oración. Algunos errores necesitan un lector y no hay manera de esquivarlo.
- La concordancia puede actuar a distancia. La nuestra estaba a cuatro palabras, y ninguna pasada de la cadena miraba tan lejos.
- Restrinja una comprobación a las formas que de verdad pueden diferir. Cinco verbos de más significaban cuatro líneas sobre las que nadie podía actuar.
- Una comprobación que produce líneas inaccionables acaba saltada, lo que es peor que no tenerla.
- Deje por escrito las coincidencias aprobadas con su motivo, y falle ante una nueva. El silencio no es un resultado.
- Una página cerrada se analiza limpia. Ponga una cota inferior al tamaño de lo que se ha analizado.
- Demuestre la prueba en rojo. Una caché de desarrollo puso la nuestra en verde y no habría certificado nada.
Para que quede claro qué es esto: la conversión de los artículos hizo 491 sustituciones en 44 ficheros, con una diferencia de exactamente 306 líneas dentro y 306 fuera y sin tocar nada fuera del árbol de fuentes en neerlandés; la conversión del catálogo hizo 169 sustituciones sobre 115 claves, con el recuento de claves intacto en 18841 y en el mismo orden, y el delta de caracteres del fichero entero cuadrado letra a letra. Los dos cuerpos miden ahora cero pronombres formales, y el invariante de palabras que compara cada par de palabras que no es la forma de tratamiento informó de cero diferencias y se demostró en rojo tres veces. Sin demostrar: un solo lector, ningún segundo hablante nativo, ninguna medición de accesibilidad, y el texto de la vía de error de tres pantallas cerradas nunca se renderizó en un navegador.
Del trabajo de plataforma en Provibr. Lo que nueve catálogos le hacen a un conjunto de controles fijos está en dieciséis mil claves, nueve idiomas, un script de transformación que dañó tres artículos a los que nunca se apuntó está en un script de conversión que abarcó demasiado, y otra guarda que no podía ver aquello para lo que se escribió está en un plural vago no es un número.