La fonction est appelée DeterminePageLanguage
. C'est dans le dossiercomponents/translate/core/language_detection/language_detection_util.cc
Chrome vérifie d'abord l' attribut HTMLlang
et s'il n'est pas présent, il vérifie l' Content-Language
en-tête HTTP . Ensuite, il obtient une prédiction cld3
.
Le Compact Language Detector v3 (ou CLD3) est un modèle de réseau neuronal pour l'identification du langage. Le README déclare:
Le code d'inférence extrait les ngrammes de caractères du texte d'entrée et calcule la fraction de fois où chacun d'eux apparaît. Par exemple, comme le montre la figure ci-dessous, si le texte saisi est "banane", alors l'un des trigrammes extraits est "ana" et la fraction correspondante est 2/4. Les ngrammes sont hachés jusqu'à un id dans une petite plage, et chaque id est représenté par un vecteur d'intégration dense estimé pendant l'entraînement.
Le modèle fait la moyenne des plongements correspondant à chaque type de ngram en fonction des fractions, et les plongements moyennés sont concaténés pour produire la couche d'intégration.
Donc, essentiellement, ils ont téléchargé des copies d'un tas de sites Web et payé quelqu'un pour regarder le texte sur ces sites Web et dire dans quelle langue ils sont écrits. Ensuite, ils ont divisé le texte en n-grammes (groupes de n lettres), etc. et utilisé un réseau de neurones pour apprendre une correspondance entre les distributions de n-grammes et les langues.
Alors maintenant, ils ont 2 variables:
language
qui est défini à partir du HTML ou de l'en-tête (rappelez-vous que l'attribut HTML a priorité si les deux sont présents)
cld_language
qui est une prédiction basée sur les fréquences des groupes de lettres sur la page
Ensuite, nous avons frappé cette série d'instructions if (j'ai édité la partie où elles envoient des données analytiques sur les incompatibilités linguistiques)
if (language.empty()) {
return cld_language;
}
if (cld_language == kUnknownLanguageCode) {
return language;
}
if (CanCLDComplementSubCode(language, cld_language)) {
return cld_language;
}
if (IsSameOrSimilarLanguages(language, cld_language)) {
return language;
}
if (MaybeServerWrongConfiguration(language, cld_language)) {
return cld_language;
}
// Content-Language value might be wrong because CLD says that this page is
// written in another language with confidence. In this case, Chrome doesn't
// rely on any of the language codes, and gives up suggesting a translation.
return kUnknownLanguageCode;
CLD3 est petit et est exécuté localement. En fait, c'est open source et ils distribuent un modèle pré-formé (bien que le code pour la formation du modèle et les données qu'ils ont utilisées ne soient pas disponibles). Vous pouvez l'utiliser dans vos projets.
Il existe même des liaisons Python (non officielles et non entretenues) pour le code C ++ d'origine (vous devrez installer Cython )
pip install cld3