Detectar el idioma de un texto y por qué los textos cortos fallan
Publicado el 14/8/2026 · 17 min de lectura · Herramientas de texto e idioma
Daniel Okonkwo — Desarrollador front-end y redactor de Tecnología en Allin
Rendimiento web · Formatos de archivo
Verificado con 3 fuentes
La herramienta trabaja en cuatro etapas. Primero cuenta las letras en once rangos de escrituras Unicode, y si más del 30% del texto cae en uno de ellos el alfabeto zanja la cuestión por sí solo: coreano, kana, han, griego, árabe, hebreo, devanagari, tailandés, armenio y georgiano no necesitan estadística. El cirílico recibe una segunda estimación dentro de su propia familia. El texto latino pasa por un suelo: por debajo de doce letras la herramienta se niega a responder y lo dice. Por encima, entrega el texto a un modelo de trigramas restringido a las lenguas de escritura latina y después desempata los casos ajustados con listas de palabras funcionales y patrones ortográficos por idioma. El suelo se midió y se sostiene: doce de doce truncamientos a diez y once letras fueron rechazados. El problema es que por encima la herramienta ya no rechaza nunca. Alimentada con 90 frases cortas que la gente pega de verdad —saludos, despedidas, confirmaciones de pedido— en los seis idiomas de este sitio, respondió a las 90 y acertó 68: un 76% en total, un 64% en la franja de doce a quince letras. Nueve de los veintidós errores volvieron con un 75% de confianza o más y cuatro con exactamente el 100%: una despedida francesa leída como italiano, un estado de pedido español leído como italiano, una confirmación portuguesa leída como español y una despedida alemana leída como indonesio. La cifra de confianza se calcula a partir de la distancia con el segundo, así que mide la separación entre candidatos, no si el ganador es correcto. Sobre prosa seguida el cuadro es mucho mejor: en 348 truncamientos de 24 frases, el acierto es del 85 al 93% entre quince y treinta letras y de 200 sobre 201 por encima de cuarenta. Toma todo lo que baje de unas cuarenta letras como una sugerencia y lee las alternativas.
Medido, no afirmado: 90 frases cortas reales en seis idiomas, ninguna rechazada y 68 acertadas — un 76%, que baja al 64% por debajo de dieciséis letras. Cuatro de las respuestas erróneas volvieron con un 100% de confianza.
Lo que hace realmente la herramienta, en cuatro etapas
La etapa uno es el alfabeto, y es la señal fiable más barata que existe. El código contiene once expresiones regulares sobre bloques Unicode —hangul, kana, han, cirílico, griego, árabe, hebreo, devanagari, tailandés, armenio y georgiano—, cuenta cuántas letras del texto caen en cada uno, y si alguno se lleva más del 30% de las letras responde de inmediato. Ningún modelo de trigramas lo mejora, y por eso una línea de japonés o de griego vuelve con confianza máxima a partir de cuatro o cinco caracteres, muy por debajo del suelo que se aplica al texto latino.
La etapa dos es ese suelo: doce letras. No doce caracteres —el código cuenta letras con una propiedad Unicode, así que las cifras, los espacios y la puntuación no ayudan—. Por debajo de doce no devuelve nada en absoluto y la interfaz indica que el texto es demasiado corto. Esta es la parte que funciona, y se probó truncando frases palabra a palabra: a diez y once letras, doce entradas de doce fueron rechazadas.
La etapa tres es un modelo de trigramas. Corta el texto en secuencias solapadas de tres caracteres y compara sus frecuencias con un perfil almacenado para cada idioma; gana el idioma cuyo perfil queda más cerca. Es el enfoque clásico del problema y es realmente bueno sobre párrafos, porque patrones de tres letras como «ent», «ung», «ção» y «gli» se reparten de forma muy distinta según la lengua. Es débil sobre fragmentos por una razón evidente: una frase de tres palabras da una docena de trigramas, y una docena de muestras no identifica una distribución.
La etapa cuatro es un desempate, y solo un desempate. Los candidatos cuya puntuación de trigramas queda a menos de 0,4 del líder se reordenan con dos indicios adicionales: listas de palabras funcionales escritas a mano, cada palabra ponderada por uno partido por el número de listas en que aparece y descartada si aparece en más de tres, y una expresión regular por idioma que captura ortografías casi decisivas —ß y sch para el alemán, ñ y el signo de apertura de interrogación para el español, ã, nh y lh para el portugués, gli y zione para el italiano—. Aplicado globalmente esto empeoraba los resultados, porque «du» pertenece a la vez al francés, al alemán y al sueco. Restringido a los candidatos que los trigramas ya han empatado, resuelve las confusiones que importan.
Dónde empieza a equivocarse, medido
Se pasaron dos bancos de pruebas. El primero truncó 24 frases —cuatro en cada uno de los seis idiomas de este sitio— en cada frontera de palabra, dando 348 entradas desde seis letras hasta unas noventa. Los resultados por franja: todo lo que tenía diez y once letras fue rechazado; de doce a catorce letras, 92%; de quince a diecinueve, 85%; de veinte a veinticuatro, 85%; de veinticinco a veintinueve, 93%; de treinta a treinta y nueve, 96%; y por encima de cuarenta letras, 200 de 201. El punto a partir del cual una frase acertaba y seguía acertando tuvo una mediana de quince letras, pero el peor caso llegó a cuarenta y seis: una frase portuguesa que empieza por «Ela abriu a janela porque o quarto» se leía como español, con un 100% de confianza a las veintiuna letras, y así hasta las cuarenta y cinco.
El segundo banco es el que importa, porque está hecho de lo que la gente pega de verdad: 90 frases cortas en los seis idiomas —saludos, despedidas, confirmaciones de pedido, mensajes de error, «adjunto encontrarás»— de doce a treinta y cuatro letras. Ninguna fue rechazada. Sesenta y ocho acertaron: 76% en total, 64% en la franja de doce a quince, 78% de dieciséis a diecinueve, 82% de veinte a veinticuatro. Sobre el material que más a menudo se le da a esta herramienta, aproximadamente una respuesta de cada cuatro es errónea.
Los errores no se esconden. «Merci beaucoup», trece letras, vuelve como indonesio con un 100% de confianza. «Bis Montag dann» vuelve como indonesio al 100%. «À lundi prochain» y «Tu pedido ha salido» vuelven ambos como italiano al 100%. «Encomenda confirmada» vuelve como español al 100%. «Buenos días a todos» vuelve como portugués al 91%. Nueve de los veintidós errores estaban al 75% o por encima, que es la franja que la interfaz pinta de verde.
La confianza mide la separación, no el acierto
El porcentaje que acompaña a la respuesta no es una probabilidad de acierto, y leerlo así es la principal manera en que esta herramienta induce a error. Se calcula a partir de la distancia relativa entre la puntuación del ganador y la del segundo, multiplicada por tres y desplazada: una distancia amplia da 100%, una estrecha da algo cercano al 45%, y todo queda acotado entre el 35% y el 100%.
Eso significa que una respuesta confiada es aquella a la que ningún otro idioma se acercó, no una que probablemente sea correcta. En «Bis Montag dann» nada se acercó al indonesio, así que la herramienta imprimió 100% y se equivocó. En cambio, también significa que los números bajos son informativos en la dirección correcta: cuando la herramienta dice 46%, el segundo candidato es realmente competitivo y a menudo correcto, y la interfaz hace lo honesto al listar las alternativas debajo con sus propias barras.
Así que la regla de lectura es sencilla e invierte el instinto habitual. Una barra verde sobre un texto largo es de fiar. Una barra verde sobre tres palabras solo te dice que el modelo no dudó, cosa que con tres palabras rara vez ocurre de otro modo. Por debajo de unas cuarenta letras, mira el segundo candidato antes de creerte el primero.
Diecinueve idiomas que la herramienta lista y nunca puede responder
Este es el defecto estructural, y es invisible desde la interfaz. El código contiene una lista de treinta y cinco lenguas de escritura latina que pide al modelo de trigramas que considere, y una tabla de cincuenta y dos nombres de idiomas escritos en su propia lengua, listos para imprimir. El modelo de trigramas, franc-min, solo tiene perfiles para cuarenta y cuatro lenguas de escritura latina, y diecisiete de las treinta y cinco pedidas están entre ellas. Las otras dieciocho se descartan en silencio, junto con el macedonio del lado cirílico.
Diecinueve de los cincuenta y dos nombres de esa tabla no pueden por tanto ser nunca la respuesta: danés, noruego bokmål, finés, eslovaco, esloveno, lituano, letón, estonio, catalán, euskera, gallego, afrikáans, malayo, albanés, galés, irlandés, islandés, esperanto y macedonio. Pega danés y no obtienes «no estoy seguro»: obtienes otra cosa, con seguridad. «Jeg vil gerne bestille en kop kaffe og et stykke kage, tak.» vuelve como neerlandés al 75%. La versión noruega de la misma frase también vuelve como neerlandés, al 48%. La versión sueca es correcta, porque el sueco es uno de los diecisiete.
La rama cirílica tiene una versión más suave del mismo problema. Seis de los siete idiomas que considera sí existen en el modelo, así que el ruso y el ucraniano salen bien, pero la segunda estimación dentro de una familia sigue siendo una estimación: «Здравейте, как сте?» es búlgaro y vuelve como ruso al 85%. La etapa de la escritura acertó la escritura y la etapa de la familia se equivocó de idioma, lo que resume con honestidad lo que la detección por alfabeto puede y no puede hacer.
Palabras sueltas, primos cercanos, nombres propios y cosas que no son prosa
Una palabra suelta que pertenece a varios idiomas se trata correctamente, y por accidente. «information» tiene once letras, «important» nueve, «national» ocho: todas por debajo del suelo de doce letras, así que la herramienta rechaza las tres, que es la respuesta correcta para una palabra que es de verdad inglesa y francesa a la vez. Encadénalas en «innovation, information, important» y cruzas el suelo con treinta letras: la respuesta es inglés al 46%, con el francés puntuando exactamente igual en trigramas, 1,00 contra 1,00, y solo el desempate separándolos. El número bajo es la herramienta diciéndote la verdad.
Los pares de lenguas próximas se comportan exactamente como predice la literatura: bien en frases, desastrosos en fragmentos. Seis frases completas en español y portugués se identificaron todas correctamente, incluido el par casi mínimo «Es importante para todos.» y «É importante para todos.», separados solo por un acento. Acórtalas y se derrumba: «Pedido confirmado» se lee como portugués al 95%, «Encomenda confirmada» como español al 100%, «Buenos días a todos» como portugués al 91%. El danés y el noruego hacen algo peor que confundirse aquí: ninguno de los dos puede devolverse.
Un nombre propio suelto es el caso más claro de una herramienta que responde a una pregunta que no puede responder. «Emmanuel Macron» vuelve como tagalo al 100%. «Jean-Baptiste Poquelin» vuelve como neerlandés al 100%. «Wolfgang Amadeus Mozart» vuelve como tagalo al 79%. «Antonio Vivaldi» vuelve como italiano al 100%, acertado por suerte y no por evidencia. Un nombre no lleva gramática ni casi ninguna palabra funcional; el modelo de trigramas compara patrones de letras sin nada más en que apoyarse.
Lo mismo vale para todo lo que no es prosa seguida. Una línea de SQL vuelve como inglés al 100%, cosa defendible ya que sus palabras clave son palabras inglesas. Una línea de JavaScript vuelve como portugués al 58%. Un fragmento de HTML —un div con un atributo de clase que envuelve un span con la palabra Hello— vuelve como español al 91%. Una URL vuelve como portugués al 71%, una dirección postal francesa como español al 49%, las doce primeras letras del alfabeto como neerlandés al 100%, y dieciséis letras a seguidas como neerlandés al 61%. Ninguna etapa del proceso pregunta si la entrada es siquiera lengua; el único filtro es el recuento de letras.
Texto mezclado, acentos y cómo usar la herramienta
Un texto multilingüe recibe una sola respuesta, y es el idioma mayoritario en vez de un aviso. «Hello, merci beaucoup for your quick reply.» vuelve como inglés al 100%. «Bonjour, I would like to confirm notre réunion de demain matin à dix heures.» vuelve como francés al 67%, con el inglés segundo a 0,93 frente a 1,00: lo bastante cerca para que la lista de alternativas te diga algo. Si tu texto es un correo bilingüe o una fila de memoria de traducción, divídelo antes de preguntar.
Una expectativa resultó falsa, y merece anotarse. Quitar todos los acentos de una frase parece que debería destrozar al detector, ya que el desempate se apoya en ñ, ã, ß, ç y demás. No es así. Cinco frases largas se redujeron a ASCII puro y las cinco volvieron con el mismo idioma y la misma confianza del 100%: el modelo de trigramas ya decidía, y la tabla de ortografía solo toma la palabra cuando el modelo duda. Los acentos importan en los casos cortos, y los casos cortos ya no eran fiables.
Así que: dale un párrafo. Tres o cuatro frases completas del mismo idioma te sitúan por encima de cuarenta letras con margen, y por encima de cuarenta letras acertó en 200 de 201 entradas. Si solo tienes un fragmento, lee las alternativas, y da por incontestable un nombre, una dirección, una URL o una línea de código, sea cual sea el porcentaje que aparezca al lado. Y si la respuesta que esperas es danés, noruego, finés, catalán, euskera, gallego, islandés o alguno de los otros doce de esa lista, ninguna cantidad de texto la producirá.
| Entrada | Respuesta | ¿Correcto? |
|---|---|---|
| Merci beaucoup — 13 letras, francés | Indonesio, 100% | No — y nada se le acercó, de ahí la cifra de 100 |
| Bis Montag dann — 13 letras, alemán | Indonesio, 100% | No — demasiados pocos trigramas para que el modelo vea el alemán |
| Encomenda confirmada — 19 letras, portugués | Español, 100% | No — el clásico derrumbe español/portugués sobre un fragmento |
| information — 11 letras | Rechazado: demasiado corto | Sí — la palabra es inglesa y francesa a la vez; rechazar es la respuesta correcta |
| Emmanuel Macron — 14 letras, un nombre | Tagalo, 100% | Sin respuesta — un nombre no lleva gramática ni casi palabras funcionales |
| Una frase danesa sobre pedir café y pastel | Neerlandés, 75% | No — el danés es uno de los diecinueve nombres que la herramienta lista y nunca puede devolver |
| Las doce primeras letras del alfabeto | Neerlandés, 100% | No — exactamente doce letras superan el suelo, y no se comprueba nada más |
| Un fragmento de HTML que envuelve la palabra Hello | Español, 91% | Sin respuesta — ninguna etapa pregunta si la entrada es siquiera lengua |
| Una frase francesa completa de 67 letras | Francés, 100% | Sí — por encima de cuarenta letras acertó en 200 de 201 entradas |
Preguntas frecuentes
- ¿Cuánto texto necesita en realidad?
- Unas cuarenta letras de prosa seguida, es decir tres o cuatro oraciones. El suelo inscrito en el código es de doce letras, por debajo del cual rechaza sin más, y esa parte funciona: doce de doce truncamientos a diez y once letras fueron rechazados. Entre doce y cuarenta letras siempre responde y a menudo se equivoca: sobre 348 truncamientos de 24 frases, el acierto fue del 92% a doce-catorce letras, 85% de quince a veinticuatro, 93% de veinticinco a veintinueve, 96% de treinta a treinta y nueve, y 200 de 201 por encima de cuarenta. Sobre frases cortas autónomas en vez de frases truncadas es aún peor: 68 aciertos de 90, ninguna rechazada. Una frase completa suele bastar y un párrafo sobra; un saludo no.
- ¿Por qué dijo 100% y se equivocó?
- Porque el porcentaje no es una probabilidad de acierto. Se deriva de la distancia relativa entre la puntuación del primer candidato y la del segundo: una distancia amplia da 100, una estrecha unos 45, y el resultado queda acotado entre 35 y 100. Una respuesta confiada significa por tanto que ningún otro idioma se acercó, no que la respuesta sea probablemente correcta. Sobre trece letras de alemán, ningún otro idioma se acercó al indonesio, así que imprimió 100 y se equivocó. El instinto habitual —número alto igual a fiable— está exactamente al revés en entradas cortas. Para lo que el número sirve de verdad es para el sentido contrario: cuando indica 46, el segundo es competitivo y a menudo el correcto, y la interfaz lista las alternativas debajo precisamente por eso.
- Dice neerlandés para mi texto danés. ¿Es un fallo?
- Sí, y estructural. El código pide a su modelo de trigramas que considere treinta y cinco lenguas de escritura latina, pero el modelo —franc-min— solo tiene perfiles para diecisiete de ellas. Las otras dieciocho se descartan sin decir nada, así que el danés, el noruego bokmål, el finés, el eslovaco, el esloveno, el lituano, el letón, el estonio, el catalán, el euskera, el gallego, el afrikáans, el malayo, el albanés, el galés, el irlandés, el islandés y el esperanto nunca pueden ser la respuesta, y tampoco el macedonio del lado cirílico. Son diecinueve de los cincuenta y dos nombres que la herramienta está preparada para imprimir. Una frase danesa sobre pedir café y pastel volvió como neerlandés al 75%, y la versión noruega de la misma frase como neerlandés al 48%. El sueco funciona, porque es uno de los diecisiete. Si tu idioma está en esa lista, ninguna cantidad de texto adicional ayudará.
- ¿Distingue el español del portugués, o el danés del noruego?
- El español del portugués, sí, en una frase completa: se probaron seis frases completas y las seis acertaron, incluido el par casi mínimo «Es importante para todos.» y «É importante para todos.», que difieren en un acento. La etapa de desempate existe sobre todo para eso: contiene patrones ortográficos como ã, nh, lh y ção para el portugués, y ñ y el signo de apertura de interrogación para el español. Sobre fragmentos falla: «Pedido confirmado» se leyó como portugués, «Encomenda confirmada» como español, ambos al 95% o más. El danés del noruego, no, y no porque se parezcan: ninguno de los dos idiomas existe en el modelo subyacente, así que ambos vuelven como neerlandés. El sueco y el neerlandés son las dos lenguas germánicas de esa región que la herramienta puede nombrar de verdad.
- ¿Quitar los acentos de mi texto rompe la detección?
- En una frase completa no, cosa bastante sorprendente como para merecer una prueba. Cinco frases largas en francés, español, portugués, alemán e italiano se redujeron a ASCII puro y las cinco volvieron con el mismo idioma y la misma confianza del 100% que antes. La razón está en la forma del proceso: los patrones ortográficos solo actúan como desempate, sobre candidatos que el modelo de trigramas ya ha puntuado a menos de 0,4 entre sí, y sobre una frase larga el modelo no duda. Los acentos sí pesan en entradas cortas, pero las entradas cortas ya eran poco fiables por otras razones, así que el consejo práctico no cambia. Si quitas los acentos para normalizar una columna con vistas a una búsqueda o a un orden, detecta el idioma antes de despojar, no después.
Artículos que podrían interesarte
Todas las guías →Herramientas relacionadas
Todo lo que sigue describe lo que hacen hoy estas cuatro herramientas, comprobado ejecutando su propio código sobre las entradas exactas que aparecen en cada artículo, y no lo que una norma les obligue a hacer. Cuando una herramienta falla en un caso, queda escrito con claridad en vez de sortearlo, y no se ha cambiado nada para que un artículo se lea mejor. Dos consecuencias. Pasa cualquier transformación primero sobre una copia y compara los dos extremos: una herramienta de texto que borra algo no lo anuncia. Y da un secreto por compartido en cuanto sale de la página: pegarlo en una conversación, un ticket o un repositorio lo quema, por bien generado que estuviera.
Fuentes
- wooorm (GitHub) — franc — the trigram language-detection library, and the reduced franc-min model this tool loads
- Unicode Consortium — UAX #24: Unicode Script Property — the block and script data behind alphabet detection
- SIL International — ISO 639-3 code tables — the three-letter language codes the tool returns
¿Has detectado un error en este artículo?