Détecter la langue d'un texte, et pourquoi les textes courts échouent
Publié le 14/08/2026 · 18 min de lecture · Outils texte & langage
Daniel Okonkwo — Développeur front-end et rédacteur Tech chez OneKitly
Performance web · Formats de fichiers
Vérifié à partir de 3 sources
L'outil travaille en quatre étapes. Il compte d'abord les lettres dans onze plages d'écritures Unicode : si plus de 30 % du texte tombe dans l'une d'elles, l'alphabet tranche à lui seul — coréen, kana, han, grec, arabe, hébreu, devanagari, thaï, arménien et géorgien n'ont besoin d'aucune statistique. Le cyrillique reçoit une seconde estimation à l'intérieur de sa propre famille. Le texte latin passe par un plancher : en dessous de douze lettres, l'outil refuse de répondre et le dit. Au-dessus, il confie le texte à un modèle de trigrammes restreint aux langues à écriture latine, puis départage les quasi-égalités avec des listes de mots outils et des motifs orthographiques par langue. Le plancher a été mesuré et il tient : douze troncatures sur douze à dix et onze lettres ont été refusées. Le problème est qu'au-dessus, l'outil ne refuse plus jamais. Alimenté avec 90 phrases courtes que les gens collent vraiment — salutations, formules de politesse, confirmations de commande — dans les six langues de ce site, il a répondu aux 90 et en a réussi 68 : 76 % au total, 64 % dans la tranche de douze à quinze lettres. Neuf des vingt-deux erreurs sont revenues avec 75 % de confiance ou plus, et quatre à exactement 100 % : une formule de congé française lue en italien, un état de commande espagnol lu en italien, une confirmation portugaise lue en espagnol et un adieu allemand lu en indonésien. Le chiffre de confiance est calculé à partir de l'écart avec le second, il mesure donc la séparation des candidats, pas la justesse du vainqueur. Sur de la prose suivie, le tableau est bien meilleur : sur 348 troncatures de 24 phrases, la justesse est de 85 à 93 % entre quinze et trente lettres, et de 200 sur 201 au-delà de quarante. Considère tout ce qui fait moins de quarante lettres comme une suggestion et lis les seconds choix.
Mesuré, pas affirmé : 90 phrases courtes réelles dans six langues, aucune refusée et 68 justes — 76 %, tombant à 64 % en dessous de seize lettres. Quatre des réponses fausses sont revenues avec 100 % de confiance.
Ce que fait réellement l'outil, en quatre étapes
L'étape un, c'est l'alphabet, et c'est le signal fiable le moins cher qui soit. Le code contient onze expressions régulières sur des blocs Unicode — hangul, kana, han, cyrillique, grec, arabe, hébreu, devanagari, thaï, arménien et géorgien — compte combien de lettres du texte tombent dans chacun, et si l'un d'eux prend plus de 30 % des lettres, il répond immédiatement. Aucun modèle de trigrammes ne fait mieux, et c'est pourquoi une ligne de japonais ou de grec revient avec une confiance maximale à partir de quatre ou cinq caractères, bien en dessous du plancher qui s'applique au texte latin.
L'étape deux, c'est ce plancher : douze lettres. Pas douze caractères — le code compte les lettres avec une propriété Unicode, donc les chiffres, les espaces et la ponctuation n'aident pas. En dessous de douze, il ne renvoie rien du tout et l'interface indique que le texte est trop court. C'est la partie qui fonctionne, et elle a été testée en tronquant des phrases mot à mot : à dix et onze lettres, douze entrées sur douze ont été refusées.
L'étape trois est un modèle de trigrammes. Il découpe le texte en séquences de trois caractères qui se chevauchent et compare leurs fréquences à un profil stocké pour chaque langue ; la langue dont le profil est le plus proche l'emporte. C'est l'approche classique du problème et elle est vraiment bonne sur des paragraphes, car des motifs de trois lettres comme « ent », « ung », « ção » et « gli » se répartissent très différemment selon les langues. Elle est faible sur les fragments pour une raison évidente : une phrase de trois mots donne une douzaine de trigrammes, et une douzaine d'échantillons n'identifie pas une distribution.
L'étape quatre est un départage, et rien d'autre. Les candidats dont le score de trigrammes se situe à moins de 0,4 du meneur sont reclassés à l'aide de deux indices supplémentaires : des listes de mots outils écrites à la main, chaque mot pondéré par un sur le nombre de listes où il apparaît et écarté s'il apparaît dans plus de trois, et une expression régulière par langue capturant une orthographe qui tranche presque — ß et sch pour l'allemand, ñ et le point d'interrogation inversé pour l'espagnol, ã, nh et lh pour le portugais, gli et zione pour l'italien. Appliqué globalement, cela dégradait les résultats, car « du » appartient à la fois au français, à l'allemand et au suédois. Restreint aux candidats déjà à égalité selon les trigrammes, cela règle les confusions qui comptent.
Là où il commence à se tromper, mesuré
Deux bancs d'essai ont été passés. Le premier a tronqué 24 phrases — quatre dans chacune des six langues de ce site — à chaque frontière de mot, donnant 348 entrées de six lettres jusqu'à environ quatre-vingt-dix. Les résultats par tranche : tout ce qui faisait dix et onze lettres a été refusé ; de douze à quatorze lettres, 92 % ; de quinze à dix-neuf, 85 % ; de vingt à vingt-quatre, 85 % ; de vingt-cinq à vingt-neuf, 93 % ; de trente à trente-neuf, 96 % ; et au-delà de quarante lettres, 200 sur 201. Le point à partir duquel une phrase devenait juste et le restait avait une médiane de quinze lettres, mais le pire cas montait à quarante-six : une phrase portugaise commençant par « Ela abriu a janela porque o quarto » était lue en espagnol, avec 100 % de confiance à vingt et une lettres, et ce jusqu'à quarante-cinq.
Le second banc est celui qui compte, car il est fait de ce que les gens collent vraiment : 90 phrases courtes dans les six langues — salutations, formules de politesse, confirmations de commande, messages d'erreur, « veuillez trouver ci-joint » — de douze à trente-quatre lettres. Aucune n'a été refusée. Soixante-huit étaient justes : 76 % au total, 64 % dans la tranche de douze à quinze, 78 % de seize à dix-neuf, 82 % de vingt à vingt-quatre. Sur le matériau qu'on donne le plus souvent à cet outil, environ une réponse sur quatre est fausse.
Les erreurs ne s'en cachent pas. « Merci beaucoup », treize lettres, revient en indonésien avec 100 % de confiance. « Bis Montag dann » revient en indonésien à 100 %. « À lundi prochain » et « Tu pedido ha salido » reviennent tous deux en italien à 100 %. « Encomenda confirmada » revient en espagnol à 100 %. « Buenos días a todos » revient en portugais à 91 %. Neuf des vingt-deux erreurs étaient à 75 % ou plus, c'est-à-dire dans la tranche que l'interface peint en vert.
La confiance mesure la séparation, pas la justesse
Le pourcentage à côté de la réponse n'est pas une probabilité d'avoir raison, et le lire ainsi est la principale façon dont cet outil induit en erreur. Il est calculé à partir de l'écart relatif entre le score du vainqueur et celui du second, multiplié par trois et décalé — un grand écart donne 100 %, un petit donne quelque chose autour de 45 %, et le tout est borné entre 35 % et 100 %.
Cela signifie qu'une réponse confiante est une réponse dont aucune autre langue ne s'est approchée, pas une réponse probablement juste. Sur « Bis Montag dann », rien ne s'est approché de l'indonésien : l'outil a affiché 100 % et s'est trompé. En revanche, cela signifie aussi que les faibles pourcentages sont informatifs dans le bon sens : quand l'outil annonce 46 %, le second candidat est réellement compétitif et souvent correct, et l'interface fait le bon choix en listant les seconds en dessous avec leurs propres barres.
La règle de lecture est donc simple et elle inverse l'instinct habituel. Une barre verte sur un texte long est digne de confiance. Une barre verte sur trois mots te dit seulement que le modèle n'a pas hésité, ce qui sur trois mots est rarement le cas contraire. En dessous d'environ quarante lettres, regarde le second candidat avant de croire le premier.
Dix-neuf langues que l'outil affiche et ne peut jamais répondre
C'est le défaut structurel, et il est invisible depuis l'interface. Le code contient une liste de trente-cinq langues à écriture latine qu'il demande au modèle de trigrammes d'examiner, et une table de cinquante-deux noms de langues écrits dans leur propre langue, prêts à afficher. Le modèle de trigrammes, franc-min, n'a de profils que pour quarante-quatre langues à écriture latine, et dix-sept des trente-cinq demandées en font partie. Les dix-huit autres sont écartées en silence, avec le macédonien du côté cyrillique.
Dix-neuf des cinquante-deux noms de cette table ne peuvent donc jamais être la réponse : danois, norvégien bokmål, finnois, slovaque, slovène, lituanien, letton, estonien, catalan, basque, galicien, afrikaans, malais, albanais, gallois, irlandais, islandais, espéranto et macédonien. Colle du danois et tu n'obtiens pas « je ne sais pas » : tu obtiens autre chose, avec assurance. « Jeg vil gerne bestille en kop kaffe og et stykke kage, tak. » revient en néerlandais à 75 %. La version norvégienne de la même phrase revient aussi en néerlandais, à 48 %. La version suédoise est correcte, parce que le suédois fait partie des dix-sept.
La branche cyrillique a une version plus douce du même problème. Six des sept langues qu'elle examine existent bien dans le modèle, donc le russe et l'ukrainien ressortent justes, mais la seconde estimation à l'intérieur d'une famille reste une estimation : « Здравейте, как сте? » est du bulgare et revient en russe à 85 %. L'étape de l'écriture a trouvé la bonne écriture et l'étape de la famille s'est trompée de langue, ce qui résume honnêtement ce que la détection par alphabet peut et ne peut pas faire.
Mots isolés, cousins proches, noms propres et ce qui n'est pas de la prose
Un mot isolé appartenant à plusieurs langues est traité correctement, et par accident. « information » fait onze lettres, « important » neuf, « national » huit — tous sous le plancher de douze lettres, donc l'outil refuse les trois, ce qui est la bonne réponse pour un mot qui est réellement à la fois anglais et français. Enchaîne-les en « innovation, information, important » et tu franchis le plancher à trente lettres : la réponse est l'anglais à 46 % — avec le français au même score de trigrammes exactement, 1,00 contre 1,00, seul le départage les séparant. Le chiffre bas est l'outil qui te dit la vérité.
Les paires de langues proches se comportent exactement comme la littérature le prévoit : bien sur des phrases, désespérées sur des fragments. Six phrases complètes en espagnol et en portugais ont toutes été identifiées correctement, y compris la paire quasi minimale « Es importante para todos. » et « É importante para todos. », séparées par un seul accent. Raccourcis-les et tout s'effondre : « Pedido confirmado » est lu en portugais à 95 %, « Encomenda confirmada » en espagnol à 100 %, « Buenos días a todos » en portugais à 91 %. Le danois et le norvégien font pire que se confondre ici — aucun des deux ne peut être renvoyé.
Un nom propre isolé est le cas le plus net d'un outil qui répond à une question à laquelle il ne peut pas répondre. « Emmanuel Macron » revient en tagalog à 100 %. « Jean-Baptiste Poquelin » revient en néerlandais à 100 %. « Wolfgang Amadeus Mozart » revient en tagalog à 79 %. « Antonio Vivaldi » revient en italien à 100 %, juste par chance et non par preuve. Un nom ne porte aucune grammaire et presque aucun mot outil ; le modèle de trigrammes compare des motifs de lettres sans rien d'autre sur quoi s'appuyer.
Il en va de même pour tout ce qui n'est pas de la prose suivie. Une ligne de SQL revient en anglais à 100 %, ce qui se défend puisque ses mots-clés sont des mots anglais. Une ligne de JavaScript revient en portugais à 58 %. Un fragment de HTML — un div avec un attribut de classe enveloppant un span contenant le mot Hello — revient en espagnol à 91 %. Une URL revient en portugais à 71 %, une adresse postale française en espagnol à 49 %, les douze premières lettres de l'alphabet en néerlandais à 100 %, et seize « a » consécutifs en néerlandais à 61 %. Aucune étape du traitement ne demande si l'entrée est seulement de la langue ; le seul filtre est le compte de lettres.
Texte mélangé, accents, et comment se servir de l'outil
Un texte multilingue reçoit une seule réponse, et c'est la langue majoritaire plutôt qu'un avertissement. « Hello, merci beaucoup for your quick reply. » revient en anglais à 100 %. « Bonjour, I would like to confirm notre réunion de demain matin à dix heures. » revient en français à 67 %, avec l'anglais second à 0,93 contre 1,00 — assez proche pour que la liste des seconds t'apprenne quelque chose. Si ton texte est un e-mail bilingue ou une ligne de mémoire de traduction, découpe-le avant de poser la question.
Une attente s'est révélée fausse, et cela mérite d'être noté. Retirer tous les accents d'une phrase semble devoir démolir le détecteur, puisque le départage s'appuie sur ñ, ã, ß, ç et le reste. Il n'en est rien. Cinq phrases longues ont été réduites à de l'ASCII pur, et les cinq sont revenues avec la même langue et la même confiance de 100 % : le modèle de trigrammes décidait déjà, et la table d'orthographe n'a la parole que lorsque le modèle hésite. Les accents comptent pour les cas courts, et les cas courts n'étaient déjà pas fiables.
Donc : donne-lui un paragraphe. Trois ou quatre phrases complètes de la même langue te placent au-dessus de quarante lettres avec de la marge, et au-dessus de quarante lettres il a eu juste sur 200 entrées sur 201. Si tu n'as qu'un fragment, lis les seconds choix, et considère qu'un nom, une adresse, une URL ou une ligne de code est sans réponse, quel que soit le pourcentage affiché à côté. Et si la réponse attendue est le danois, le norvégien, le finnois, le catalan, le basque, le galicien, l'islandais ou l'une des douze autres de cette liste, aucune quantité de texte ne la produira.
| Entrée | Réponse | Correct ? |
|---|---|---|
| Merci beaucoup — 13 lettres, français | Indonésien, 100 % | Non — et rien ne s'en est approché, d'où le chiffre de 100 |
| Bis Montag dann — 13 lettres, allemand | Indonésien, 100 % | Non — trop peu de trigrammes pour que le modèle voie l'allemand |
| Encomenda confirmada — 19 lettres, portugais | Espagnol, 100 % | Non — l'effondrement classique espagnol/portugais sur un fragment |
| information — 11 lettres | Refusé : trop court | Oui — le mot est à la fois anglais et français ; refuser est la bonne réponse |
| Emmanuel Macron — 14 lettres, un nom | Tagalog, 100 % | Sans réponse — un nom ne porte ni grammaire ni presque aucun mot outil |
| Une phrase danoise sur une commande de café et de gâteau | Néerlandais, 75 % | Non — le danois fait partie des dix-neuf noms listés que l'outil ne peut jamais renvoyer |
| Les douze premières lettres de l'alphabet | Néerlandais, 100 % | Non — douze lettres exactement franchissent le plancher, et rien d'autre n'est vérifié |
| Un fragment de HTML enveloppant le mot Hello | Espagnol, 91 % | Sans réponse — aucune étape ne demande si l'entrée est seulement de la langue |
| Une phrase française complète de 67 lettres | Français, 100 % | Oui — au-dessus de quarante lettres, l'outil a eu juste sur 200 entrées sur 201 |
Questions fréquentes
- De combien de texte a-t-il réellement besoin ?
- Environ quarante lettres de prose suivie, soit trois ou quatre propositions. Le plancher inscrit dans le code est de douze lettres, en dessous desquelles il refuse net, et cette partie fonctionne : douze troncatures sur douze à dix et onze lettres ont été refusées. Entre douze et quarante lettres, il répond toujours et se trompe souvent — sur 348 troncatures de 24 phrases, la justesse était de 92 % à douze-quatorze lettres, 85 % de quinze à vingt-quatre, 93 % de vingt-cinq à vingt-neuf, 96 % de trente à trente-neuf, et 200 sur 201 au-delà de quarante. Sur des phrases courtes autonomes plutôt que sur des phrases tronquées, c'est encore pire : 68 justes sur 90, aucune refusée. Une phrase complète suffit donc généralement, et un paragraphe largement ; une salutation, non.
- Pourquoi a-t-il annoncé 100 % et s'est-il trompé ?
- Parce que le pourcentage n'est pas une probabilité d'avoir raison. Il est dérivé de l'écart relatif entre le score du meilleur candidat et celui du second : un grand écart donne 100, un petit environ 45, et le résultat est borné entre 35 et 100. Une réponse confiante signifie donc qu'aucune autre langue ne s'est approchée, pas que la réponse est probablement juste. Sur treize lettres d'allemand, aucune autre langue ne s'est approchée de l'indonésien : il a affiché 100 et s'est trompé. L'instinct habituel — chiffre élevé égale digne de confiance — est exactement inversé sur une entrée courte. Ce à quoi le chiffre sert vraiment, c'est l'autre sens : quand il indique 46, le second est compétitif et souvent le bon, et l'interface liste les seconds en dessous précisément pour cela.
- Il dit néerlandais pour mon texte danois. Est-ce un bug ?
- Oui, et un bug structurel. Le code demande à son modèle de trigrammes d'examiner trente-cinq langues à écriture latine, mais le modèle — franc-min — n'a de profils que pour dix-sept d'entre elles. Les dix-huit autres sont écartées sans un mot : le danois, le norvégien bokmål, le finnois, le slovaque, le slovène, le lituanien, le letton, l'estonien, le catalan, le basque, le galicien, l'afrikaans, le malais, l'albanais, le gallois, l'irlandais, l'islandais et l'espéranto ne peuvent donc jamais être la réponse, ni le macédonien du côté cyrillique. Cela fait dix-neuf des cinquante-deux noms que l'outil est prêt à afficher. Une phrase danoise sur une commande de café et de gâteau est revenue en néerlandais à 75 %, et la version norvégienne de la même phrase en néerlandais à 48 %. Le suédois fonctionne, parce qu'il fait partie des dix-sept. Si ta langue est sur cette liste, aucune quantité de texte supplémentaire n'y changera rien.
- Distingue-t-il l'espagnol du portugais, ou le danois du norvégien ?
- L'espagnol du portugais, oui, sur une phrase complète : six phrases complètes ont été testées et les six étaient justes, y compris la paire quasi minimale « Es importante para todos. » et « É importante para todos. », qui diffèrent d'un accent. L'étape de départage existe surtout pour cela — elle contient des motifs orthographiques comme ã, nh, lh et ção pour le portugais, et ñ et le point d'interrogation inversé pour l'espagnol. Sur des fragments, elle échoue : « Pedido confirmado » a été lu en portugais, « Encomenda confirmada » en espagnol, tous deux à 95 % ou plus. Le danois du norvégien, non, et pas parce qu'ils se ressemblent — aucune des deux langues n'existe dans le modèle sous-jacent, donc les deux reviennent en néerlandais. Le suédois et le néerlandais sont les deux langues germaniques de cette région que l'outil peut réellement nommer.
- Retirer les accents de mon texte casse-t-il la détection ?
- Pas sur une phrase complète, ce qui était assez surprenant pour mériter un test. Cinq phrases longues en français, espagnol, portugais, allemand et italien ont été réduites à de l'ASCII pur, et les cinq sont revenues avec la même langue et la même confiance de 100 % qu'avant. La raison tient à la forme du traitement : les motifs orthographiques ne servent que de départage, sur des candidats déjà à moins de 0,4 les uns des autres selon le modèle de trigrammes, et sur une phrase longue le modèle n'hésite pas. Les accents pèsent bien sur les entrées courtes — mais les entrées courtes n'étaient déjà pas fiables pour d'autres raisons, donc le conseil pratique ne change pas. Si tu retires les accents pour normaliser une colonne en vue d'une recherche ou d'un tri, détecte la langue avant de dépouiller, pas après.
Articles qui pourraient t'intéresser
Tous les guides →Outils similaires
Tout ce qui suit décrit ce que font ces quatre outils aujourd'hui, vérifié en exécutant leur propre code sur les entrées exactes reproduites dans chaque article — et non ce qu'une norme leur imposerait. Quand un outil se trompe sur un cas, c'est dit franchement plutôt que contourné, et rien n'a été modifié pour qu'un article se lise mieux. Deux conséquences. Passe toute transformation sur une copie d'abord et compare les deux bouts : un outil de texte qui supprime quelque chose ne le dit pas. Et considère un secret comme partagé dès qu'il quitte la page — le coller dans une conversation, un ticket ou un dépôt le brûle, aussi bien ait-il été généré.
Sources
- 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
Tu as repéré une erreur dans cet article ?