Ir para o conteúdo
Allin

Detetar o idioma de um texto e porque os textos curtos falham

Publicado a 14/08/2026 · 17 min de leitura · Ferramentas de texto e idioma

Daniel Okonkwo

Daniel OkonkwoProgramador front-end e redator de Tecnologia na Allin

Desempenho web · Formatos de ficheiro

Verificado a partir de 3 fontes

Ver perfil
Em resumo

A ferramenta trabalha em quatro etapas. Primeiro conta as letras em onze intervalos de escritas Unicode, e se mais de 30% do texto cair num deles o alfabeto resolve a questão sozinho — coreano, kana, han, grego, árabe, hebraico, devanágari, tailandês, arménio e georgiano não precisam de estatística. O cirílico recebe um segundo palpite dentro da sua própria família. O texto latino passa por um piso: abaixo de doze letras a ferramenta recusa-se a responder e di-lo. Acima, entrega o texto a um modelo de trigramas restrito às línguas de escrita latina e depois desempata os casos renhidos com listas de palavras funcionais e padrões ortográficos por idioma. O piso foi medido e aguenta-se: doze de doze truncagens a dez e onze letras foram recusadas. O problema é que acima dele a ferramenta nunca mais recusa. Alimentada com 90 frases curtas que as pessoas colam mesmo — cumprimentos, despedidas, confirmações de encomenda — nos seis idiomas deste site, respondeu às 90 e acertou 68: 76% no total, 64% na faixa de doze a quinze letras. Nove dos vinte e dois erros voltaram com 75% de confiança ou mais e quatro com exatamente 100%: uma despedida francesa lida como italiano, um estado de encomenda espanhol lido como italiano, uma confirmação portuguesa lida como espanhol e uma despedida alemã lida como indonésio. O número de confiança é calculado a partir da distância ao segundo, portanto mede a separação entre candidatos, não se o vencedor está certo. Em prosa seguida o quadro é bem melhor: em 348 truncagens de 24 frases, o acerto é de 85 a 93% entre quinze e trinta letras e de 200 em 201 acima de quarenta. Trate tudo o que fique abaixo de cerca de quarenta letras como uma sugestão e leia as alternativas.

Medido, não afirmado: 90 frases curtas reais em seis idiomas, nenhuma recusada e 68 certas — 76%, caindo para 64% abaixo de dezasseis letras. Quatro das respostas erradas voltaram com 100% de confiança.

O que a ferramenta faz realmente, em quatro etapas

A etapa um é o alfabeto, e é o sinal fiável mais barato que existe. O código contém onze expressões regulares sobre blocos Unicode — hangul, kana, han, cirílico, grego, árabe, hebraico, devanágari, tailandês, arménio e georgiano — conta quantas letras do texto caem em cada um, e se algum levar mais de 30% das letras responde de imediato. Nenhum modelo de trigramas o melhora, e é por isso que uma linha de japonês ou de grego volta com confiança máxima a partir de quatro ou cinco carateres, muito abaixo do piso que se aplica ao texto latino.

A etapa dois é esse piso: doze letras. Não doze carateres — o código conta letras com uma propriedade Unicode, portanto algarismos, espaços e pontuação não ajudam. Abaixo de doze não devolve nada e a interface indica que o texto é demasiado curto. É esta a parte que funciona, e foi testada truncando frases palavra a palavra: a dez e onze letras, doze entradas em doze foram recusadas.

A etapa três é um modelo de trigramas. Corta o texto em sequências sobrepostas de três carateres e compara as suas frequências com um perfil guardado para cada idioma; ganha o idioma cujo perfil fica mais perto. É a abordagem clássica do problema e é realmente boa em parágrafos, porque padrões de três letras como «ent», «ung», «ção» e «gli» se repartem de forma muito diferente conforme a língua. É fraca em fragmentos por uma razão evidente: uma frase de três palavras dá uma dúzia de trigramas, e uma dúzia de amostras não identifica uma distribuição.

A etapa quatro é um desempate, e apenas isso. Os candidatos cuja pontuação de trigramas fica a menos de 0,4 do líder são reordenados com dois indícios adicionais: listas de palavras funcionais escritas à mão, cada palavra ponderada por um a dividir pelo número de listas em que aparece e descartada se aparecer em mais de três, e uma expressão regular por idioma que capta ortografias quase decisivas — ß e sch para o alemão, ñ e o ponto de interrogação invertido para o espanhol, ã, nh e lh para o português, gli e zione para o italiano. Aplicado globalmente isto piorava os resultados, porque «du» pertence ao mesmo tempo ao francês, ao alemão e ao sueco. Restrito aos candidatos que os trigramas já empataram, resolve as confusões que importam.

Onde começa a errar, medido

Passaram-se dois bancos de ensaio. O primeiro truncou 24 frases — quatro em cada um dos seis idiomas deste site — em cada fronteira de palavra, dando 348 entradas de seis letras até cerca de noventa. Os resultados por faixa: tudo o que tinha dez e onze letras foi recusado; de doze a catorze letras, 92%; de quinze a dezanove, 85%; de vinte a vinte e quatro, 85%; de vinte e cinco a vinte e nove, 93%; de trinta a trinta e nove, 96%; e acima de quarenta letras, 200 em 201. O ponto a partir do qual uma frase passava a acertar e continuava a acertar teve uma mediana de quinze letras, mas o pior caso chegou a quarenta e seis: uma frase portuguesa a começar por «Ela abriu a janela porque o quarto» era lida como espanhol, com 100% de confiança às vinte e uma letras, e assim até às quarenta e cinco.

O segundo banco é o que importa, porque é feito daquilo que as pessoas colam mesmo: 90 frases curtas nos seis idiomas — cumprimentos, despedidas, confirmações de encomenda, mensagens de erro, «segue em anexo» — de doze a trinta e quatro letras. Nenhuma foi recusada. Sessenta e oito acertaram: 76% no total, 64% na faixa de doze a quinze, 78% de dezasseis a dezanove, 82% de vinte a vinte e quatro. Sobre o material que mais vezes é dado a esta ferramenta, cerca de uma resposta em cada quatro está errada.

Os erros não se escondem. «Merci beaucoup», treze letras, volta como indonésio com 100% de confiança. «Bis Montag dann» volta como indonésio a 100%. «À lundi prochain» e «Tu pedido ha salido» voltam ambos como italiano a 100%. «Encomenda confirmada» volta como espanhol a 100%. «Buenos días a todos» volta como português a 91%. Nove dos vinte e dois erros estavam a 75% ou acima, que é a faixa que a interface pinta de verde.

A confiança mede a separação, não o acerto

A percentagem ao lado da resposta não é uma probabilidade de estar certa, e lê-la assim é a principal maneira como esta ferramenta induz em erro. É calculada a partir da distância relativa entre a pontuação do vencedor e a do segundo, multiplicada por três e deslocada: uma distância larga dá 100%, uma estreita dá algo perto de 45%, e o conjunto fica limitado entre 35% e 100%.

Isso significa que uma resposta confiante é aquela a que nenhum outro idioma se aproximou, não uma que provavelmente esteja certa. Em «Bis Montag dann» nada se aproximou do indonésio, portanto a ferramenta imprimiu 100% e errou. Em contrapartida, significa também que os números baixos são informativos no sentido certo: quando a ferramenta diz 46%, o segundo candidato é realmente competitivo e muitas vezes correto, e a interface faz o que é honesto ao listar as alternativas por baixo com as suas próprias barras.

Portanto a regra de leitura é simples e inverte o instinto habitual. Uma barra verde num texto longo é de confiança. Uma barra verde em três palavras diz-lhe apenas que o modelo não hesitou, coisa que com três palavras raramente é de outro modo. Abaixo de cerca de quarenta letras, olhe para o segundo candidato antes de acreditar no primeiro.

Dezanove idiomas que a ferramenta lista e nunca pode responder

Este é o defeito estrutural, e é invisível a partir da interface. O código contém uma lista de trinta e cinco línguas de escrita latina que pede ao modelo de trigramas para considerar, e uma tabela de cinquenta e dois nomes de idiomas escritos na sua própria língua, prontos a imprimir. O modelo de trigramas, franc-min, só tem perfis para quarenta e quatro línguas de escrita latina, e dezassete das trinta e cinco pedidas estão entre elas. As outras dezoito são descartadas em silêncio, juntamente com o macedónio do lado cirílico.

Dezanove dos cinquenta e dois nomes dessa tabela nunca podem, portanto, ser a resposta: dinamarquês, norueguês bokmål, finlandês, eslovaco, esloveno, lituano, letão, estónio, catalão, basco, galego, africâner, malaio, albanês, galês, irlandês, islandês, esperanto e macedónio. Cole dinamarquês e não obtém «não sei»: obtém outra coisa, com segurança. «Jeg vil gerne bestille en kop kaffe og et stykke kage, tak.» volta como neerlandês a 75%. A versão norueguesa da mesma frase também volta como neerlandês, a 48%. A versão sueca está correta, porque o sueco é um dos dezassete.

O ramo cirílico tem uma versão mais suave do mesmo problema. Seis dos sete idiomas que considera existem mesmo no modelo, portanto o russo e o ucraniano saem certos, mas o segundo palpite dentro de uma família continua a ser um palpite: «Здравейте, как сте?» é búlgaro e volta como russo a 85%. A etapa da escrita acertou na escrita e a etapa da família enganou-se no idioma, o que resume honestamente o que a deteção por alfabeto pode e não pode fazer.

Palavras isoladas, primos próximos, nomes próprios e coisas que não são prosa

Uma palavra isolada que pertence a vários idiomas é tratada corretamente, e por acidente. «information» tem onze letras, «important» nove, «national» oito — todas abaixo do piso de doze letras, portanto a ferramenta recusa as três, o que é a resposta certa para uma palavra que é mesmo inglesa e francesa ao mesmo tempo. Encadeie-as em «innovation, information, important» e atravessa o piso com trinta letras: a resposta é inglês a 46%, com o francês a pontuar exatamente o mesmo nos trigramas, 1,00 contra 1,00, e só o desempate a separá-los. O número baixo é a ferramenta a dizer-lhe a verdade.

Os pares de línguas próximas comportam-se exatamente como a literatura prevê: bem em frases, desastrosos em fragmentos. Seis frases completas em espanhol e português foram todas identificadas corretamente, incluindo o par quase mínimo «Es importante para todos.» e «É importante para todos.», separados apenas por um acento. Encurte-as e tudo desaba: «Pedido confirmado» é lido como português a 95%, «Encomenda confirmada» como espanhol a 100%, «Buenos días a todos» como português a 91%. O dinamarquês e o norueguês fazem pior do que confundir-se aqui — nenhum dos dois pode ser devolvido.

Um nome próprio isolado é o caso mais claro de uma ferramenta a responder a uma pergunta a que não pode responder. «Emmanuel Macron» volta como tagalo a 100%. «Jean-Baptiste Poquelin» volta como neerlandês a 100%. «Wolfgang Amadeus Mozart» volta como tagalo a 79%. «Antonio Vivaldi» volta como italiano a 100%, certo por sorte e não por prova. Um nome não traz gramática nem quase nenhuma palavra funcional; o modelo de trigramas compara padrões de letras sem mais nada em que se apoiar.

O mesmo vale para tudo o que não é prosa seguida. Uma linha de SQL volta como inglês a 100%, o que se defende já que as suas palavras-chave são palavras inglesas. Uma linha de JavaScript volta como português a 58%. Um fragmento de HTML — um div com um atributo de classe a envolver um span com a palavra Hello — volta como espanhol a 91%. Um URL volta como português a 71%, uma morada francesa como espanhol a 49%, as doze primeiras letras do alfabeto como neerlandês a 100%, e dezasseis letras a seguidas como neerlandês a 61%. Nenhuma etapa do processo pergunta se a entrada é sequer língua; o único filtro é a contagem de letras.

Texto misturado, acentos e como usar a ferramenta

Um texto multilingue recebe uma só resposta, e é o idioma maioritário em vez de um aviso. «Hello, merci beaucoup for your quick reply.» volta como inglês a 100%. «Bonjour, I would like to confirm notre réunion de demain matin à dix heures.» volta como francês a 67%, com o inglês em segundo a 0,93 contra 1,00 — perto o suficiente para que a lista de alternativas lhe diga alguma coisa. Se o seu texto for um e-mail bilingue ou uma linha de memória de tradução, divida-o antes de perguntar.

Uma expectativa revelou-se falsa, e merece ser anotada. Tirar todos os acentos de uma frase parece dever destruir o detetor, já que o desempate se apoia em ñ, ã, ß, ç e afins. Não é assim. Cinco frases longas foram reduzidas a ASCII puro e as cinco voltaram com o mesmo idioma e a mesma confiança de 100%: o modelo de trigramas já decidia, e a tabela de ortografia só toma a palavra quando o modelo hesita. Os acentos importam nos casos curtos, e os casos curtos já não eram fiáveis.

Portanto: dê-lhe um parágrafo. Três ou quatro frases completas do mesmo idioma colocam-no acima de quarenta letras com folga, e acima de quarenta letras acertou em 200 de 201 entradas. Se só tiver um fragmento, leia as alternativas, e dê por insolúvel um nome, uma morada, um URL ou uma linha de código, seja qual for a percentagem que apareça ao lado. E se a resposta que espera for dinamarquês, norueguês, finlandês, catalão, basco, galego, islandês ou uma das outras doze dessa lista, nenhuma quantidade de texto a produzirá.

O que a ferramenta respondeu em entradas curtas, com a contagem de letras e a confiança que imprimiu
EntradaRespostaCorreto?
Merci beaucoup — 13 letras, francêsIndonésio, 100%Não — e nada se lhe aproximou, daí o número 100
Bis Montag dann — 13 letras, alemãoIndonésio, 100%Não — trigramas a menos para o modelo ver sequer o alemão
Encomenda confirmada — 19 letras, portuguêsEspanhol, 100%Não — o clássico colapso espanhol/português num fragmento
information — 11 letrasRecusado: demasiado curtoSim — a palavra é inglesa e francesa ao mesmo tempo; recusar é a resposta certa
Emmanuel Macron — 14 letras, um nomeTagalo, 100%Sem resposta — um nome não traz gramática nem quase palavras funcionais
Uma frase dinamarquesa sobre pedir café e boloNeerlandês, 75%Não — o dinamarquês é um dos dezanove nomes que a ferramenta lista e nunca pode devolver
As doze primeiras letras do alfabetoNeerlandês, 100%Não — exatamente doze letras passam o piso, e nada mais é verificado
Um fragmento de HTML a envolver a palavra HelloEspanhol, 91%Sem resposta — nenhuma etapa pergunta se a entrada é sequer língua
Uma frase francesa completa de 67 letrasFrancês, 100%Sim — acima de quarenta letras acertou em 200 de 201 entradas
Detetor de idiomaDetete o idioma de qualquer texto.Experimentar a ferramenta

Perguntas frequentes

De quanto texto precisa realmente?
Cerca de quarenta letras de prosa seguida, ou seja três ou quatro orações. O piso inscrito no código é de doze letras, abaixo das quais recusa liminarmente, e essa parte funciona: doze de doze truncagens a dez e onze letras foram recusadas. Entre doze e quarenta letras responde sempre e erra muitas vezes — em 348 truncagens de 24 frases, o acerto foi de 92% a doze-catorze letras, 85% de quinze a vinte e quatro, 93% de vinte e cinco a vinte e nove, 96% de trinta a trinta e nove, e 200 em 201 acima de quarenta. Em frases curtas autónomas em vez de frases truncadas é ainda pior: 68 certas em 90, nenhuma recusada. Uma frase completa costuma chegar e um parágrafo sobra; um cumprimento não.
Porque é que disse 100% e errou?
Porque a percentagem não é uma probabilidade de estar certa. Deriva da distância relativa entre a pontuação do primeiro candidato e a do segundo: uma distância larga dá 100, uma estreita cerca de 45, e o resultado fica limitado entre 35 e 100. Uma resposta confiante significa, portanto, que nenhum outro idioma se aproximou, não que a resposta seja provavelmente correta. Em treze letras de alemão, nenhum outro idioma se aproximou do indonésio, portanto imprimiu 100 e errou. O instinto habitual — número alto igual a fiável — está exatamente ao contrário em entradas curtas. Aquilo para que o número serve mesmo é o sentido inverso: quando indica 46, o segundo é competitivo e muitas vezes o certo, e a interface lista as alternativas por baixo precisamente por isso.
Diz neerlandês para o meu texto dinamarquês. É um erro?
Sim, e estrutural. O código pede ao seu modelo de trigramas que considere trinta e cinco línguas de escrita latina, mas o modelo — franc-min — só tem perfis para dezassete delas. As outras dezoito são descartadas sem uma palavra, portanto o dinamarquês, o norueguês bokmål, o finlandês, o eslovaco, o esloveno, o lituano, o letão, o estónio, o catalão, o basco, o galego, o africâner, o malaio, o albanês, o galês, o irlandês, o islandês e o esperanto nunca podem ser a resposta, nem o macedónio do lado cirílico. São dezanove dos cinquenta e dois nomes que a ferramenta está preparada para imprimir. Uma frase dinamarquesa sobre pedir café e bolo voltou como neerlandês a 75%, e a versão norueguesa da mesma frase como neerlandês a 48%. O sueco funciona, porque é um dos dezassete. Se o seu idioma estiver nessa lista, nenhuma quantidade de texto adicional ajudará.
Distingue o espanhol do português, ou o dinamarquês do norueguês?
O espanhol do português, sim, numa frase completa: testaram-se seis frases completas e as seis acertaram, incluindo o par quase mínimo «Es importante para todos.» e «É importante para todos.», que diferem num acento. A etapa de desempate existe sobretudo para isso — contém padrões ortográficos como ã, nh, lh e ção para o português, e ñ e o ponto de interrogação invertido para o espanhol. Em fragmentos falha: «Pedido confirmado» foi lido como português, «Encomenda confirmada» como espanhol, ambos a 95% ou mais. O dinamarquês do norueguês, não, e não por serem parecidos — nenhum dos dois idiomas existe no modelo subjacente, portanto ambos voltam como neerlandês. O sueco e o neerlandês são as duas línguas germânicas dessa região que a ferramenta pode realmente nomear.
Retirar os acentos do meu texto estraga a deteção?
Numa frase completa não, o que foi surpreendente o bastante para merecer um teste. Cinco frases longas em francês, espanhol, português, alemão e italiano foram reduzidas a ASCII puro e as cinco voltaram com o mesmo idioma e a mesma confiança de 100% de antes. A razão está na forma do processo: os padrões ortográficos só atuam como desempate, sobre candidatos que o modelo de trigramas já pontuou a menos de 0,4 uns dos outros, e numa frase longa o modelo não hesita. Os acentos pesam mesmo em entradas curtas — mas as entradas curtas já eram pouco fiáveis por outras razões, portanto o conselho prático não muda. Se retirar os acentos para normalizar uma coluna com vista a uma pesquisa ou a uma ordenação, detete o idioma antes de despojar, não depois.

Artigos que podem interessar-lhe

Todos os guias
ExplicaçãoContar carateres contra um limite que outra pessoa definiuUm emoji vale 1 carácter, ou 7, ou 11, ou 25, consoante quem conta. Qual deles o seu formulário, a sua base de dados e o seu gateway de SMS querem dizer — e um teste de uma só colagem para saber com qual está a lidar.ExplicaçãoMaiúscula de frase e maiúscula de título: as regras mudam com a línguaAs maiúsculas de título inglesas têm três cortes diferentes consoante o manual de estilo. O português, o francês, o espanhol e o italiano não têm nenhum. O alemão capitaliza todos os substantivos. A ferramenta não sabe nada disto — eis exatamente o que faz.ExplicaçãoRetirar os acentos estraga a pesquisa — até o fazer dos dois ladosRebater os diacríticos é um passo de normalização, e a normalização só funciona quando a mesma função corre sobre o índice e sobre a consulta. NFC contra NFD com os pontos de código à vista, e as letras — ø, ł, ß, œ, ı — que saem do rebatimento intactas.ExplicaçãoO que um verificador de palíndromos tem de decidir antes de poder responderCaixa, espaços, pontuação e diacríticos: quatro políticas, seis frases reais, e a resposta muda com cada uma. Depois a metade mais difícil — inverter uma cadeia não está definido em si, e a inversão por unidade de código parte os emojis e desprende os acentos, demonstrado no Node.ExplicaçãoContagem de palavras: tempo de leitura e limitesUma contagem de palavras são palavras separadas por espaços. Eis como se conta, porque existem limites, como se traduz em páginas e tempo de leitura, e quando contam os caracteres.TutorialExtrair o texto de um PDF, e o que a paginação lhe fazUm PDF guarda glifos em coordenadas — não linhas, não parágrafos, não uma ordem de leitura. A extração reconstrói o texto a partir dessas posições, e é por isso que duas colunas saem entrelaçadas, uma tabela perde as células e uma digitalização não dá nada. Medido executando a ferramenta.

Ferramentas relacionadas

Tudo o que se segue descreve o que estas quatro ferramentas fazem hoje, verificado executando o seu próprio código sobre as entradas exatas reproduzidas em cada artigo, e não o que uma norma as obrigue a fazer. Quando uma ferramenta erra num caso, fica escrito com clareza em vez de contornado, e nada foi alterado para um artigo ler melhor. Duas consequências. Passe qualquer transformação primeiro por uma cópia e compare as duas pontas: uma ferramenta de texto que apaga alguma coisa não o anuncia. E dê um segredo por partilhado assim que ele sai da página: colá-lo numa conversa, num ticket ou num repositório queima-o, por melhor que tenha sido gerado.

Fontes

Detetaste um erro neste artigo?