W jaki sposób Chrome decyduje, co wyróżnić po dwukrotnym kliknięciu japońskiego tekstu?


214

Po dwukrotnym kliknięciu tekstu w języku angielskim w Chrome podświetlone słowo rozdzielone spacjami zostanie podświetlone. To nie jest zaskakujące. Jednak pewnego dnia kliknąłem podczas czytania tekstu w języku japońskim i zauważyłem, że niektóre słowa zostały podświetlone na granicach słów, mimo że w języku japońskim nie ma spacji. Oto przykładowy tekst:

ど こ で 生 れ た か と ん と 見 当 当 が か 何 で も も 薄 暗 暗 じ め じ め し し た 所 で で ニ ニ ー ニ ャ ー 泣 泣 い て い た た 事 事 け て い し し。

Na przykład, jeśli klikniesz 薄 暗 い, Chrome poprawnie podświetli je jako pojedyncze słowo, nawet jeśli nie jest to jedna klasa znaków (jest to połączenie kanji i hiragana). Nie wszystkie podświetlenia są prawidłowe, ale nie wydają się przypadkowe.

Jak Chrome decyduje, co tu wyróżnić? Próbowałem przeszukać źródło Chrome pod kątem „japońskiego słowa”, ale znalazłem tylko testy eksperymentalnego modułu , który nie wydaje się aktywny w mojej wersji Chrome.


1
@Nathaniel Nie wiem, jak to jest dla ciebie, ale kiedy podwójnie klikam kanji, to tylko zaznacza kanji, a kiedy podwójnie klikam w hiragana, wybiera tylko kolejne hiragana, i to samo przez krótki czas z katakana (nya nya)
Strawberry

4
Część じ め じ め し た jest dobrą częścią do testowania, czy przeglądarka faktycznie dokonuje inteligentnego wyboru słów, a nie tylko zatrzymuje zaznaczanie na granicach kana / kanji / rōmaji. To wszystko hiragana, ale Chrome (i Safari) poprawnie wybierają tylko część じ め じ め (część し た to odmiana czasownika). Z drugiej strony Firefox nieprawidłowo wybiera い じ め じ め し た (ponieważ Firefox w ogóle nie rozpoznaje rzeczywistych granic słów, ale najwyraźniej zatrzymuje zaznaczenie na granicach kana / kanji / rōmaji).
sidehowbarker

2
@ Strawberry Widzę. Dla mnie wybiera słowo 薄 暗 い, jak opisano w pytaniu. (Chrome, Mac.)
Nathaniel

1
Z jednym wyjątkiem, w każdej aplikacji macOS, w której testowałem - TextEdit, Stickies, Notes, Terminal itp. - kliknij dwukrotnie inteligentny wybór słów japońskiego tekstu zgodnie z oczekiwaniami. Przynajmniej w systemie macOS Chrome nie robi nic specjalnego, czego nie robią praktycznie wszystkie inne aplikacje macOS - po prostu korzysta z istniejącej obsługi łamania słów opartej na OIOM wbudowanej w macOS.
sidehowbarker

1
W systemie macOS Firefox jest jedynym wyjątkiem, który znalazłem w regule, że wszystkie aplikacje macOS mogą wykonywać ten sam rodzaj inteligentnego wyboru słowa japońskiego tekstu podwójnym kliknięciem opisanego w tym pytaniu. Wydaje się, że Firefox robi tylko znacznie prostszą rzecz: zatrzymanie zaznaczenia na granicach kana / kanji / rōmaji. Inżynier Firefox powiedział mi, że Firefox nie używa wbudowanych interfejsów API platformy macOS opartych na OIOM do wybierania tekstu. Zobacz pokrewny błąd bugzil.la/345823 .
sidehowbarker

Odpowiedzi:


165

Okazuje się, że v8 ma niestandardowy wielojęzyczny segmentator słów i obsługuje japoński.

function tokenizeJA(text) {
  var it = Intl.v8BreakIterator(['ja-JP'], {type:'word'})
  it.adoptText(text)
  var words = []

  var cur = 0, prev = 0

  while (cur < text.length) {
    prev = cur
    cur = it.next()
    words.push(text.substring(prev, cur))
  }

  return words
}

console.log(tokenizeJA('どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。'))
// ["どこ", "で", "生れ", "たか", "とんと", "見当", "が", "つ", "か", "ぬ", "。", "何でも", "薄暗い", "じめじめ", "した", "所", "で", "ニャーニャー", "泣", "い", "て", "いた事", "だけ", "は", "記憶", "し", "て", "いる", "。"]

Zrobiłem też jsfiddle, który to pokazuje.

Jakość nie jest niesamowita, ale jestem zaskoczony, że w ogóle jest obsługiwana.



10
Zobacz także source.chromium.org/chromium/chromium/src/+/master:v8/src/…, gdzie jest to podłączone.
Xorlev,

4
System Windows ma już możliwość wybrania właściwego słowa po dwukrotnym kliknięciu japońskiego słowa. Do tego nie potrzebujesz nawet Chrome
phuclv

7
@phuclv: Nie każdy, kto korzysta z Chrome, uruchamia go w systemie Windows.
Sean

2
Czy na pewno zachowanie v8 ma jakikolwiek wpływ na zaznaczanie tekstu w interfejsie przeglądarki? Biorąc pod uwagę, że v8 jest silnikiem JavaScript, nie sądzę, że jakikolwiek kod v8 byłby wykonywany podczas wybierania tekstu w interfejsie przeglądarki. Myślę, że możesz to sprawdzić, wyłączając JavaScipt w przeglądarce, a następnie sprawdzając, czy obserwujesz to samo zachowanie. Jeśli tego nie zrobisz, pomyślałem, że to pokazałoby, że zachowanie nie jest spowodowane wersją 8. (Zrobiłbym to sam, aby to przetestować, ale jak zauważyłem w innym komentarzu, w moim środowisku macOS działa to już niezależnie od tego, w której przeglądarce testuję - nie tylko w Chrome.)
Sidehowbarker

92

Na podstawie linków opublikowanych przez JonathonW odpowiedź sprowadza się w zasadzie do: „Istnieje duża lista japońskich słów i sprawdzeń Chrome, aby sprawdzić, czy kliknięto słowo”.

W szczególności v8 używa ICU do wykonywania szeregu czynności związanych z przetwarzaniem tekstu związanych z Unicode, w tym dzielenia tekstu na słowa . Kod wykrywania granic ICU zawiera „BreakIterator oparty na słowniku” dla języków, w których nie ma spacji, w tym japoński, chiński, tajski itp.

Dla konkretnego przykładu „薄 暗 い” możesz znaleźć to słowo w połączonym słowniku chińsko-japońskim dostarczonym przez ICU (linia 255431). Na liście znajduje się obecnie 316 671 wszystkich chińskich / japońskich słów. Przypuszczalnie jeśli znajdziesz słowo, którego Chrome nie podzielił się poprawnie, możesz wysłać ICU łatkę, aby dodać to słowo.



OIOM i podobne projekty istnieją już od dawna. Nie zdziwiłbym się, gdyby silnik V8 Chrome wziął go po przejściu z WebKit, który powstał na platformach, na których standardowe silniki tekstowe wykonują tego rodzaju tokenizację od prawie 20 lat.
Rickster
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.