A função é chamada DeterminePageLanguage
. Está no arquivocomponents/translate/core/language_detection/language_detection_util.cc
O Chrome verifica primeiro o atributo HTMLlang
e, se não estiver presente, verifica o Content-Language
cabeçalho HTTP . Então, obtém uma previsão cld3
.
O Compact Language Detector v3 (ou CLD3) é um modelo de rede neural para identificação de idiomas. O README declara:
O código de inferência extrai ngrams de caracteres do texto de entrada e calcula a fração de vezes que cada um deles aparece. Por exemplo, conforme mostrado na figura abaixo, se o texto de entrada for "banana", um dos trigramas extraídos será "ana" e a fração correspondente será 2/4. Os ngrams são divididos em hash em um id dentro de um pequeno intervalo, e cada id é representado por um vetor de incorporação denso estimado durante o treinamento.
O modelo calcula a média das combinações correspondentes a cada tipo de ngram de acordo com as frações, e as variações médias são concatenadas para produzir a camada de incorporação.
Então, basicamente, eles baixaram cópias de vários sites e pagaram a alguém para olhar o texto nesses sites e dizer em que idioma eles estavam escritos. Em seguida, eles dividiram o texto em n-gramas (grupos de n letras) e assim por diante e usou uma rede neural para aprender um mapeamento entre distribuições de n-grama e idiomas.
Então agora eles têm 2 variáveis:
language
que é definido a partir do HTML ou do cabeçalho (lembre-se de que o atributo HTML tem precedência se ambos estiverem presentes)
cld_language
que é uma previsão baseada nas frequências de grupos de letras na página
Em seguida, chegamos a essa série de instruções if (editei a parte em que eles enviam dados de análise sobre incompatibilidades de idioma)
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;
O CLD3 é pequeno e é executado localmente. Na verdade, é de código aberto e eles distribuem um modelo pré-treinado (embora o código para treinar o modelo e os dados que eles usaram não estejam disponíveis). Você pode usá-lo em seus projetos.
Há até ligações Python (não oficiais e não mantidas) para o código C ++ original (você precisará instalar o Cython )
pip install cld3