Chrome, bir sayfanın hangi dilde olduğunu nasıl bilir?


10

Google Chrome'da yeni bir web sayfası açtım ve "Bu sayfa Japonca, çevirmek ister misiniz?" Yazıyor.

Bir çeviri istemek muhtemelen içeriği Google'a gönderir, ancak ilk etapta dil nasıl tanımlanır? Bu tarayıcıda yerel olarak mı yapılıyor? Yoksa bu sayfayı Google'a da gönderiyor mu? Eğer öyleyse, önce izin istenmemeli mi? Sayfanın kendisinin dili belirten bir işaretlemesi yoktur ve dahili bir intranet sayfasıdır, böylece Google'ın içeriğine erişebileceğinden emin değilim.


Soru Neden Krom hatalı farklı bir dilde olduğu sayfa belirlemek ve çevirmeyi sunuyor? hakkında StackOverflow bu konu hakkında daha fazla bilgi verir, özellikle Emile
Owen Blacker

Yanıtlar:


10

Chrome tarayıcı, bir dizi sayfa faktörüne bakarak sayfa dilini tanımlayabilir veya en azından tahmin edebilir:

Bu, başka bir İnternet bağlantısı veya Google'a rapor vermeden yerel olarak yapılabilir.

İçeriğin çevirisi kesinlikle sayfa içeriğini çeviri için Google sunucularına gönderir.


Bir zamanlar Chrome'da bir XML dosyası görüntülüyordum ve bana bir sayfa görüntülediğimi söyledi ... bazı Avrupa dilleri, belki Belçika? Bu bana metnin bazı analizlerinin gerçekleştiğini ve benim durumumda biraz yanlış gittiğini gösteriyor. İngilizce XML'in neden Belçika'yı gösteren kodlamaya sahip olduğunu anlayamıyorum. Ama evet, Japonca gibi bir şey için kodlama ölü bir hediye olurdu.
Cam Jackson

UTF-8 Japonlar için nasıl bir hediye?
Thilo

@CamJackson Eminim Belçikalı önermiyordu ... Belki de Hollandalıydı ve krom tek harfi 'ij' buldu
Peter Smit

1
Tamamen sayfa kodlaması ile değil. Rus yorum spam iyi bir miktar alır bir blog (İngilizce) var. Genellikle spam grubumu görüntülerken Chrome sayfayı çevirmemi ister. Açıkçası (bana göre) içeriği incelemek ve "diğer dil" içeriği ile tetiklenmek belirli bir yüzde eşiğinin üzerindedir.
ale

1
@Thilo, Japonca olduğunu gösteren UTF-8 değil, ancak bir sayfadaki karakterlerin büyük bir yüzdesi Japon Unicode serisinden ise, cevabınızı aldınız (otomatik dil algılama her zaman tahmin işidir) . Karakter kodlamasını kontrol bariz yöntemi başarısız, ben (veya en azından öyle olduğunu sanmıyorum ihtiyaçları tespiti için bir sunucuya sayfayı göndermek için). chrome.dllSon zamanlarda büyüklüğünü gördün mü ? Çok büyük! Son zamanlarda (büyük) kodu inceledim, ancak şüphesiz bir işlev veya dil algılama için iki yerleşik (o kadar da zor değil).
Synetech

1

İşlev çağrılır DeterminePageLanguage. Dosyadacomponents/translate/core/language_detection/language_detection_util.cc

Chrome önce HTML langözelliğini kontrol eder ve mevcut değilse Content-LanguageHTTP üstbilgisini kontrol eder . Sonra bir tahmin alır cld3.

Kompakt Dil Dedektör v3 (veya CLD3) dil tanımlama için bir sinir ağı modelidir. README şunları ifade eder:

Çıkarım kodu, giriş metninden karakter ngramları çıkarır ve her birinin kaç kez göründüğünü hesaplar. Örneğin, aşağıdaki şekilde gösterildiği gibi, giriş metni "muz" ise, çıkarılan trigramlardan biri "ana" dır ve karşılık gelen kesir 2/4'tür. Ngramlar, küçük bir aralıktaki bir kimliğe hash edilir ve her bir id, eğitim sırasında tahmin edilen yoğun bir gömme vektörü ile temsil edilir.

Model, kesirlere göre her bir ngram tipine karşılık gelen düğmelerin ortalamasını alır ve ortalama düğmeler gömme katmanını üretmek için birleştirilir.

Temelde, bir grup web sitesinin kopyalarını indirdiler ve birisine bu web sitelerindeki metne bakıp hangi dilde yazıldıklarını söylemeleri için para verdiler. Sonra metni n-grama ( n harfli gruplar ) ayırdılar . ve n-gram dağılımları ile diller arasındaki bir haritayı öğrenmek için bir sinir ağı kullandılar.

Şimdi 2 değişkenleri var:

  • language HTML veya başlıktan ayarlanır (her ikisi de varsa HTML özelliğinin öncelikli olduğunu unutmayın)
  • cld_language Bu, sayfadaki harf gruplarının sıklıklarına dayalı bir tahmindir

Sonra bu if-ifadeleri serisine ulaştık (dil uyumsuzlukları hakkında analiz verilerini gönderdikleri kısmı düzenledim)

  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 küçüktür ve yerel olarak çalıştırılır. Aslında, açık kaynak kodludur ve önceden eğitilmiş bir modeli dağıtırlar (modeli eğitmek için kullandıkları kod ve kullandıkları veriler mevcut olmasa da). Projelerinizde kullanabilirsiniz.

Orijinal C ++ kodu için Python bağları (resmi olmayan ve bakımsız) bile var ( Cython'u yüklemeniz gerekecek )

pip install cld3
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.