Wie entscheidet Chrome, was hervorgehoben werden soll, wenn Sie auf japanischen Text doppelklicken?

213

Wenn Sie in Chrome auf englischen Text doppelklicken, wird das durch Leerzeichen getrennte Wort hervorgehoben, auf das Sie geklickt haben. Das ist nicht überraschend. Neulich habe ich jedoch beim Lesen eines Textes auf Japanisch geklickt und festgestellt, dass einige Wörter an den Wortgrenzen hervorgehoben wurden, obwohl Japanisch keine Leerzeichen enthält. Hier ist ein Beispieltext:

ど こ で 生 れ た か と ん と 見 当 が つ か。 何 で も 薄 暗 じ.

Wenn Sie beispielsweise auf 薄 暗 い klicken, wird es von Chrome korrekt als einzelnes Wort hervorgehoben, obwohl es sich nicht um eine einzelne Zeichenklasse handelt (dies ist eine Mischung aus Kanji und Hiragana). Nicht alle Highlights sind korrekt, aber sie scheinen nicht zufällig zu sein.

Wie entscheidet Chrome, was hier hervorgehoben werden soll? Ich habe versucht, die Chrome-Quelle nach "japanischem Wort" zu durchsuchen, aber nur Tests für ein experimentelles Modul gefunden , das in meiner Chrome-Version nicht aktiv zu sein scheint.

polm23
quelle
1
@ Nathaniel Ich weiß nicht, wie es für dich ist, aber wenn ich auf das Kanji doppelklicke, wählt es nur das Kanji aus, und wenn ich in das Hiragana doppelklicke, wählt es nur aufeinanderfolgende Hiragana aus, und dasselbe für das kleine bisschen von katakana (nya nya)
Erdbeere
4
Der Teil じ め じ め し た ist ein guter Teil, um zu testen, ob der Browser tatsächlich eine intelligente Wortauswahl vornimmt, anstatt nur die Auswahl an den Grenzen von Kana / Kanji / Rōmaji zu stoppen. Es ist alles Hiragana, aber Chrome (und Safari) wählen nur den Teil じ め じ め richtig aus (der Teil し た ist eine Verbbeugung). Firefox hingegen wählt い じ め じ め し た falsch aus (weil Firefox die tatsächlichen Wortgrenzen überhaupt nicht erkennt, aber anscheinend nur die Auswahl an den Grenzen von Kana / Kanji / Rōmaji stoppt).
Sideshowbarker
2
@Strawberry Ich verstehe. Für mich wählt es das Wort 薄 暗 い, wie in der Frage beschrieben. (Chrome, Mac.)
Nathaniel
1
Mit einer Ausnahme doppelklicken Sie in jeder einzelnen MacOS-App, in der ich getestet habe - TextEdit, Stickies, Notizen, Terminal usw. - wie erwartet auf eine intelligente Wortauswahl für japanischen Text. Zumindest unter MacOS macht Chrome nichts Besonderes dafür, was praktisch alle anderen MacOS-Apps auch nicht tun - es verwendet lediglich die in MacOS integrierte ICU-basierte Wortumbruchunterstützung.
Sideshowbarker
1
Unter macOS ist Firefox die einzige Ausnahme, die ich von der Regel gefunden habe, dass macOS-Apps alle dieselbe Art von intelligenter Doppelklick-Wortauswahl für japanischen Text ausführen können, die in dieser Frage beschrieben wird. Firefox scheint nur das viel Einfachere zu tun, die Auswahl nur an den Grenzen von Kana / Kanji / Rōmaji zu stoppen. Ein Firefox-Ingenieur hat mir mitgeteilt, dass Firefox die integrierten ICOS-basierten MacOS-Plattform-APIs nicht für die Textauswahl verwendet. Siehe verwandten Bug bugzil.la/345823 .
Sideshowbarker

Antworten:

164

Es stellt sich also heraus, dass v8 einen nicht standardmäßigen mehrsprachigen Wortsegmentierer hat und Japanisch verarbeitet.

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('どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。'))
// ["どこ", "で", "生れ", "たか", "とんと", "見当", "が", "つ", "か", "ぬ", "。", "何でも", "薄暗い", "じめじめ", "した", "所", "で", "ニャーニャー", "泣", "い", "て", "いた事", "だけ", "は", "記憶", "し", "て", "いる", "。"]

Ich habe auch eine jsfiddle gemacht , die dies zeigt.

Die Qualität ist nicht erstaunlich, aber ich bin überrascht, dass dies überhaupt unterstützt wird.

polm23
quelle
24
Dies ist Teil des ICU-Projekts: userguide.icu-project.org/boundaryanalysis , siehe auch unicode.org/reports/tr29/#Word_Boundaries
Xorlev
10
Siehe auch source.chromium.org/chromium/chromium/src/+/master:v8/src/…, wo das verkabelt ist.
Xorlev
4
Windows hat bereits die Möglichkeit, das richtige Wort auszuwählen, wenn Sie auf ein japanisches Wort doppelklicken. Sie brauchen dafür nicht einmal Chrome
phuclv
7
@phuclv: Nicht jeder, der Chrome verwendet, führt es unter Windows aus.
Sean
2
Sind Sie sicher, dass das Verhalten von Version 8 Auswirkungen auf die Textauswahl in der Browser-Benutzeroberfläche hat? Angesichts der Tatsache, dass es sich bei v8 um eine JavaScript-Engine handelt, würde ich nicht glauben, dass der v8-Code ausgeführt wird, während Sie die Textauswahl in der Benutzeroberfläche des Browsers vornehmen. Ich denke, Sie könnten dies überprüfen, indem Sie JavaScipt im Browser deaktivieren und dann feststellen, ob Sie dasselbe Verhalten beobachten. Wenn Sie dies nicht tun, würde ich denken, dass das Verhalten nicht auf v8 zurückzuführen ist. (Ich würde das selbst tun, um es zu testen, aber wie ich in einem anderen Kommentar festgestellt habe, funktioniert dies in meiner MacOS-Umgebung bereits, unabhängig davon, in welchem ​​Browser ich teste - nicht nur in Chrome.)
Sideshowbarker
91

Basierend auf den von JonathonW geposteten Links lautet die Antwort im Wesentlichen: "Es gibt eine große Liste japanischer Wörter und Chrome-Überprüfungen, um festzustellen, ob Sie auf ein Wort doppelklicken."

Insbesondere verwendet v8 die Intensivstation , um eine Reihe von Unicode-bezogenen Textverarbeitungsaufgaben auszuführen, einschließlich der Aufteilung von Text in Wörter . Der Grenzerkennungscode auf der Intensivstation enthält einen "Dictionary-Based BreakIterator" für Sprachen ohne Leerzeichen, einschließlich Japanisch, Chinesisch, Thailändisch usw.

Und für Ihr spezielles Beispiel von "薄 暗 い" finden Sie dieses Wort in der Kombination Chinesisch-Japanisch-Wörterbuch, das von der Intensivstation geliefert wird (Zeile 255431). Derzeit sind insgesamt 315.671 chinesische / japanische Wörter in der Liste enthalten. Wenn Sie ein Wort finden, das Chrome nicht richtig aufteilt, können Sie der Intensivstation vermutlich einen Patch senden, um dieses Wort hinzuzufügen.

Erjiang
quelle
Intensiv- und ähnliche Projekte gibt es schon lange. Es würde mich nicht wundern, wenn die V8-Engine von Chrome sie nach dem Übergang von WebKit aufgreifen würde, das auf Plattformen entstanden ist, auf denen die Standard-Text-Engines diese Art der Tokenisierung seit fast 20 Jahren durchführen.
Rickster