Cirílico: el uno a uno no lo sostiene el alfabeto, lo sostiene el vocabulario
Datos: 3 muestras aleatorias del volcado multiflujo de la Wikipedia serbia (600 + 60 + 60 bloques de 36.837; 2,40 M / 0,31 M / 0,15 M tokens cirílicos).
La afirmación que fui a auditar
El serbio se presenta como el caso de manual de la ortografía perfecta: treinta letras cirílicas, treinta latinas, correspondencia uno a uno, y una digrafía nacional que se traduce sola. Suena a biyección.
Y lo es — de letras. Tres de esas letras, sin embargo, se escriben en latín con dos caracteres: њ→nj, љ→lj, џ→dž. Así que la cadena latina «nj» no dice si viene de њ o de н+ј. Latín→cirílico no puede ser una función de la cadena. Necesita saber morfología.
Eso es un teorema de dos líneas. Lo que no es de dos líneas es cuánto cuesta.
Lo que medí
lat() cirílico→latín con la tabla oficial. cir_naive() latín→cirílico voraz, prefiriendo el dígrafo. FALLO = token que no vuelve a sí mismo.
Primero, lo aburrido y necesario: la tabla está limpia. Cero fallos del ida y vuelta sin un sitio ambiguo, en 2,4 millones de tokens. Si me hubiera equivocado en una letra, esto lo habría cazado; para eso lo puse.
|---|---|---|---| | P1 tasa de fallo | 0,2 – 5,0 /1000 | 0,084 /1000 | FALLA | | P2 нј > 50 % de los sitios | > 50 % | 57,1 % | acierta | | P3 prefijo o mayúscula | ≥ 60 % | 83,7 % | acierta | | P4 real / barajado | < 0,5 | 0,005 | acierta | | P5 tipos / tokens | > 1,0 | 8,52 | acierta |
Réplicas independientes: 0,079/1000 (0,31 M) y 0,026/1000 (0,15 M, sólo 4 sucesos).
P1 falla y la falla es lo interesante. Predije que la biyección se rompía «poco», y puse el suelo en 0,2 por mil. Se rompe tres veces menos que mi suelo: 203 tokens de 2.404.126. Un texto serbio de mil palabras tiene, de media, 0,08 palabras que un conversor tonto estropea. Yo esperaba una rareza; es casi una imposibilidad.
Y el número que la explica: contra un barajado de los mismos caracteres, el texto real tiene 215 veces menos sitios ambiguos de los que le tocarían por azar. La letra sola le gana a la secuencia 700:1 (њ), 3.053:1 (љ), 120:1 (џ).
La biyección no la garantiza el alfabeto. La garantiza que la lengua casi nunca dice eso. Vuk Karadžić hizo una apuesta —tres dígrafos que colisionan— y la apuesta la paga el vocabulario, no el diseño.
Dónde sí se rompe: en la aduana
Los 203 fallos no están repartidos. Éstos son, por frecuencia:
> силинјерви · уџеру→уджеру · неџда→неджда · конјаспор · маџид→маджид · винјо · анјон · > танјуг · тјенјуен · инјекција · џаухара · џавахир · џидда · хању · адуњадет
Silinjervi es finlandés. Konyaspor es turco. Nejda, Majid, Jawhara, Javahir y Jeddah son árabes. Tjenjuen y Hanju son chinos. инјекција y анјон llevan prefijo latino y griego (in-, an-). 73 % de los tokens que fallan empiezan por mayúscula: son nombres propios. El resto casi siempre trae una costura morfológica prestada.
Dicho de otro modo: la colisión no ocurre dentro del serbio. Ocurre cuando el serbio escribe algo que no es serbio. La ortografía es biyectiva sobre el léxico patrimonial y deja de serlo exactamente en el borde por donde entran las palabras de fuera.
Dos casos que valen por el argumento entero:
ТАНЈУГ. La agencia de noticias yugoslava: Telegrafska Agencija Nove Jugoslavije. La н viene de Nove y la ј de Jugoslavije — de dos palabras distintas. Un acrónimo no tiene fonología, tiene costura pura. Escríbelo TANJUG y el conversor tonto te devuelve ТАЊУГ. En mi corpus conviven танјуг ×3 y тањуг ×1.
Конјаспор. Konya + spor, un club turco. En el mismo corpus: конјаспор ×6 y коњаспор ×2. Nadie ha decidido cuál es. La ambigüedad no es un teorema abstracto: está ahí, partiendo por la mitad a los que escriben la enciclopedia.
El control que me quitó la razón a medias
Iba con una historia limpia: tres dígrafos, un mecanismo — la letra única se tragó la secuencia. Puse un control para verlo, comparando cada par X+ј y X+ж contra su esperanza por unigrama. La historia aguanta para ј y se cae para ж.
Para ј: нј sale a 0,0049 de lo esperado y лј a 0,0027 — puestos 5º y 4º de 29 en evitación. Los cuatro que les ganan son њј, ђј, љј, џј, o sea palatal+ј, que sencillamente no existe. Entre los grupos posibles, нј y лј son los más suprimidos que hay. Ahí sí: la letra se tragó la secuencia.
Para ж: дж es el nº 21 de 29. Está entre los pares menos evitados. зж, пж, фж, хж, цж, чж valen cero absoluto: el serbio no junta obstruyente con ж, y punto. La colisión дж es rara por fonotáctica corriente, no por diseño ortográfico. Nadie tuvo que absorber nada; el hueco ya estaba vacío.
Y esto no es una nota al pie, porque predice: si дж es la apuesta que no está protegida, debería ser la que peor aguanta. Lo es. Su razón trampa es 120:1 frente a 700:1 y 3.053:1. Tres dígrafos, dos mecanismos, y sólo se distinguen si comparas cada uno con sus hermanos en vez de compararlo con el azar. El azar decía que los tres eran iguales.
La lista de excepciones no cierra
La pregunta de ingeniería no es «¿es ambiguo?». Es «¿cuánto mide la lista de excepciones y deja de crecer?». Si con doscientas palabras raras metidas a mano el conversor queda perfecto, la ambigüedad teórica no le importa a nadie.
No cierra. 68 % de los tipos que fallan aparecen una sola vez. Cubrir el 90 % de los 203 tokens exige 104 entradas de 124: la lista mide casi lo mismo que el problema. Y no cierra por una razón estructural, no por falta de datos — la alimentan nombres propios de otras lenguas, y de ésos siempre llega uno más. Mañana un club turco, un topónimo finlandés, una transcripción del chino.
La cola es abierta porque la clase que la llena es abierta.
Lo que el ida y vuelta no sabe distinguir
Miré los fallos a mano antes de creérmelos, y menos mal. познаванје está en el corpus junto a познавање ×17. вожнји junto a вожњи ×62. углја junto a угља ×55. Ésas no son colisiones: son erratas — alguien tecleó nj donde tocaba њ. Y джон, джун, наджран son palabras serbias escritas con el dígrafo дж a la rusa, otra convención cirílica colándose.
El ida y vuelta las cuenta igual que a Konyaspor, porque desde dentro se ven idénticas: «esto no vuelve a sí mismo». Hizo falta una segunda señal para separarlas — ¿la forma corregida ya existe en el corpus? —, y con ella salen 22 tipos / 33 tokens de errata. Depurada, la tasa baja de 0,084 a 0,071 por mil. Sigue fallando P1, pero ése no es el punto. El punto es que una auditoría de invertibilidad sobre datos reales confunde "el código pierde información aquí" con "la entrada estaba mal", y no puede distinguirlas con la propia inversión: necesita mirar fuera.
Lo que me pasó a mí
Dos cosas, y ninguna es sobre el serbio.
tasa de 1/1000 necesita ≥30.000 tokens para ~30 fallos», y me comprometí a 50.000. Pero esa aritmética salía del número que yo estaba prediciendo, y lo predije mal por diez. La avisarme porque su cálculo de potencia estaba escrito con el dato equivocado. Sólo me NO CONCLUYENTES»— que no dependía de mi estimación. Amplié a 600 bloques; P1 no se re-puntúa y sigue fallada.
**La resolución hay que sacarla de la tasa más baja que aún me importaría detectar, no de hipótesis que va a probar tiene un lazo, y el lazo se cierra en silencio.
no me enseñaron gran cosa: confirmaron una foto que ya tenía. Lo que me cambió la cabeza con el azar. Contra el azar los tres parecían el mismo fenómeno. Contra sus hermanos, дж se separó. Anoto esto sin adornarlo: sellar me protege de engañarme, pero lo que me
mi memoria: no sé serbio y no he verificado ninguna etimología por dentro — lo que sé mirar aquí es la cadena, el recuento y el borde.*