Comment Chrome décide-t-il des éléments à mettre en évidence lorsque vous double-cliquez sur du texte japonais?

214

Si vous double-cliquez sur du texte anglais dans Chrome, le mot délimité par des espaces sur lequel vous avez cliqué est mis en surbrillance. Ce n'est pas surprenant. Cependant, l'autre jour, je cliquais en lisant du texte en japonais et j'ai remarqué que certains mots étaient mis en évidence aux limites des mots, même si le japonais n'a pas d'espaces. Voici un exemple de texte:

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

Par exemple, si vous cliquez sur 薄 暗 い, Chrome le mettra correctement en surbrillance comme un seul mot, même s'il ne s'agit pas d'une seule classe de caractères (il s'agit d'un mélange de kanji et d'hiragana). Tous les faits saillants ne sont pas corrects, mais ils ne semblent pas aléatoires.

Comment Chrome décide-t-il des éléments à mettre en évidence ici? J'ai essayé de rechercher le mot japonais dans la source Chrome, mais je n'ai trouvé que des tests pour un module expérimental qui ne semble pas actif dans ma version de Chrome.

polm23
la source
1
@Nathaniel Je ne sais pas comment c'est pour toi, mais quand je double-clique sur le kanji, il ne sélectionne que le kanji, et quand je double-clique dans l'hiragana, il ne sélectionne que des hiragana consécutifs, et même pour le petit peu de katakana (nya nya)
Fraise
4
La partie じ め じ め し た est une bonne partie à utiliser pour tester si le navigateur fait réellement une sélection de mots intelligente plutôt que d'arrêter simplement la sélection aux limites kana / kanji / rōmaji. Tout est hiragana, mais Chrome (et Safari) ne sélectionne correctement que la partie じ め じ め (la partie し た est une inflexion de verbe). Firefox, d'autre part, ne sélectionne pas correctement い じ め じ め し た (parce que Firefox ne reconnaît pas du tout les limites réelles des mots, mais apparemment arrête simplement la sélection aux limites kana / kanji / rōmaji).
sidehowbarker
2
@ Fraise je vois. Pour moi, il sélectionne le mot 薄 暗 い, comme décrit dans la question. (Chrome, Mac.)
Nathaniel
1
À une exception près, dans chaque application macOS unique que j'ai testée - TextEdit, Stickies, Notes, Terminal, etc. - double-cliquez sur la sélection intelligente des mots du texte japonais fonctionne comme prévu. Donc, sur macOS au moins, Chrome ne fait rien de spécial pour cela que pratiquement toutes les autres applications macOS ne le font pas également - il utilise simplement le support de rupture de mots basé sur ICU intégré à macOS.
sideshowbarker
1
Sous macOS, Firefox est la seule exception que j'ai trouvée à la règle selon laquelle les applications macOS peuvent toutes faire le même type de sélection intelligente de mots en double japonais de texte japonais décrite dans cette question. Firefox semble ne faire que la chose beaucoup plus simple de simplement arrêter la sélection aux frontières kana / kanji / rōmaji. Un ingénieur de Firefox m'a dit que Firefox n'utilisait pas les API intégrées de la plate-forme macOS basée sur ICU pour la sélection de texte. Voir le bug correspondant bugzil.la/345823 .
sideshowbarker

Réponses:

165

Il s'avère donc que la v8 possède un segmenteur de mots multilingue non standard et gère le japonais.

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

J'ai également fait un jsfiddle qui le montre.

La qualité n'est pas incroyable, mais je suis surpris que cela soit pris en charge.

polm23
la source
24
Ceci fait partie du projet ICU: userguide.icu-project.org/boundaryanalysis , voir aussi unicode.org/reports/tr29/#Word_Boundaries
Xorlev
10
Voir également source.chromium.org/chromium/chromium/src/+/master:v8/src/… pour savoir où cela est branché.
Xorlev
4
Windows a déjà la possibilité de sélectionner le mot correct lorsque vous double-cliquez sur un mot japonais. Vous n'avez même pas besoin de Chrome pour cela
phuclv
7
@phuclv: tous ceux qui utilisent Chrome ne l'exécutent pas sur Windows.
Sean
2
Êtes-vous sûr que le comportement de la v8 a un effet sur la sélection de texte dans l'interface utilisateur du navigateur? Étant donné que la v8 est un moteur JavaScript, je ne pense pas que le code v8 s'exécuterait pendant que vous effectuez une sélection de texte dans l'interface utilisateur du navigateur. Je suppose que vous pouvez vérifier en désactivant JavaScipt dans le navigateur, puis en voyant si vous observez le même comportement. Si vous ne le faites pas, je pense que cela montrerait que le comportement n'est pas dû à la v8. (Je le ferais moi-même pour le tester, mais comme je l'ai noté dans un autre commentaire, dans mon environnement macOS, cela fonctionne déjà quel que soit le navigateur dans lequel je teste - pas seulement dans Chrome.)
SideShowBarker
92

Sur la base des liens publiés par JonathonW , la réponse se résume essentiellement à: "Il y a une grande liste de mots japonais et des vérifications Chrome pour voir si vous double-cliquez sur un mot."

Plus précisément, la v8 utilise ICU pour effectuer un tas de choses liées au traitement de texte Unicode, y compris la décomposition du texte en mots . Le code de détection des limites de l'ICU comprend un "BreakIterator basé sur un dictionnaire" pour les langues qui n'ont pas d'espace, y compris le japonais, le chinois, le thaï, etc.

Et pour votre exemple spécifique de "薄 暗 い", vous pouvez trouver ce mot dans le dictionnaire combiné chinois-japonais expédié par ICU (ligne 255431). Il y a actuellement 315 671 mots chinois / japonais au total dans la liste. Vraisemblablement, si vous trouvez un mot que Chrome ne divise pas correctement, vous pouvez envoyer à ICU un patch pour ajouter ce mot.

erjiang
la source
Les soins intensifs et les projets similaires existent depuis longtemps. Je ne serais pas surpris si le moteur V8 de Chrome l'a repris après leur transition de WebKit, qui est né sur des plates-formes où les moteurs de texte standard font ce type de tokenisation depuis près de 20 ans.
rickster