In che modo Chrome decide cosa evidenziare quando fai doppio clic sul testo giapponese?


214

Se fai doppio clic sul testo inglese in Chrome, viene evidenziata la parola delimitata da spazi bianchi su cui hai fatto clic. Questo non è sorprendente. Tuttavia, l'altro giorno stavo facendo clic mentre leggevo del testo in giapponese e ho notato che alcune parole erano evidenziate ai confini delle parole, anche se il giapponese non ha spazi. Ecco alcuni esempi di testo:

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

Ad esempio, se fai clic su 薄 暗 い, Chrome lo evidenzierà correttamente come una singola parola, anche se non è una singola classe di caratteri (questo è un mix di kanji e hiragana). Non tutti i momenti salienti sono corretti, ma non sembrano casuali.

In che modo Chrome decide cosa evidenziare qui? Ho provato a cercare la fonte di Chrome per "parola giapponese", ma ho trovato solo test per un modulo sperimentale che non sembra attivo nella mia versione di Chrome.


1
@Nathaniel Non so come sia per te, ma quando faccio doppio clic sul kanji, seleziona solo il kanji e quando faccio doppio clic nell'hiragana, seleziona solo hiragana consecutivi, e lo stesso per un po ' di katakana (nya nya)
Strawberry

4
La parte じ め じ め し た è una buona parte da usare per verificare se il browser sta effettivamente facendo una selezione intelligente delle parole piuttosto che fermare la selezione ai limiti kana / kanji / rōmaji. È tutto hiragana, ma Chrome (e Safari) seleziona correttamente solo la parte じ め じ め (la parte し た è un'inflessione di verbo). Firefox d'altra parte seleziona in modo errato い じ め じ め し た (perché Firefox non riconosce affatto i confini delle parole effettive, ma apparentemente interrompe la selezione ai limiti kana / kanji / rōmaji).
sideshowbarker

2
@Strawberry vedo. Per me seleziona la parola 薄 暗 い, come descritto nella domanda. (Chrome, Mac.)
Nathaniel

1
Con un'eccezione, in ogni singola app macOS in cui ho testato - TextEdit, Stickies, Notes, Terminal, ecc. - la selezione intelligente delle parole con doppio clic del testo giapponese funziona come previsto. Quindi almeno su macOS, Chrome non sta facendo nulla di speciale per questo che praticamente tutte le altre app macOS non stanno facendo, ma sta solo usando il supporto per la rottura delle parole esistente basato su ICU integrato in macOS.
sideshowbarker

1
Su macOS, Firefox è l'unica eccezione che ho riscontrato alla regola secondo cui le app macOS possono fare lo stesso tipo di selezione intelligente di parole giapponesi con doppio clic del testo giapponese descritto in questa domanda. Firefox sembra fare solo la cosa molto più semplice di interrompere la selezione ai limiti kana / kanji / rōmaji. Un ingegnere di Firefox mi ha detto che Firefox non utilizza le API della piattaforma macOS basate su ICU integrate per la selezione del testo. Vedi bug relativo bugzil.la/345823 .
sideshowbarker

Risposte:


165

Quindi risulta che v8 ha un segmentatore di parole multilingue non standard e gestisce il giapponese.

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

Ho anche realizzato un jsfiddle che mostra questo.

La qualità non è sorprendente ma sono sorpreso che questo sia supportato.




4
Windows ha già la possibilità di selezionare la parola corretta quando si fa doppio clic su una parola giapponese. Non hai nemmeno bisogno di Chrome per questo
phuclv

7
@phuclv: non tutti quelli che usano Chrome lo eseguono su Windows.
Sean

2
Sei sicuro che il comportamento della v8 influisca sulla selezione del testo nell'interfaccia utente del browser? Dato che la v8 è un motore JavaScript, non penso che nessuno del codice v8 sarebbe in esecuzione mentre stai facendo la selezione del testo nell'interfaccia utente del browser. Immagino che potresti verificare disabilitando JavaScipt nel browser e quindi vedere se osservi lo stesso comportamento. Se non lo fai, allora penserei che mostrerebbe che il comportamento non è dovuto alla v8. (Vorrei farlo io per provarlo, ma come ho osservato in un altro commento, nel mio ambiente MacOS, questo funziona già a prescindere da quale prova di browser che in -. Non solo in Chrome)
sideshowbarker

92

Sulla base dei collegamenti pubblicati da JonathonW , la risposta si riduce sostanzialmente a: "C'è un grande elenco di parole giapponesi e Chrome controlla se hai fatto doppio clic in una parola".

In particolare, v8 utilizza l' ICU per eseguire una serie di operazioni di elaborazione del testo relative a Unicode, inclusa la suddivisione del testo in parole . Il codice di rilevamento del confine ICU include un "BreakIterator basato su dizionario" per le lingue che non dispongono di spazi, inclusi giapponese, cinese, tailandese, ecc.

E per il tuo esempio specifico di "薄 暗 い", puoi trovare quella parola nel dizionario combinato cinese-giapponese spedito da ICU (linea 255431). Ci sono attualmente 315.671 parole cinesi / giapponesi totali nell'elenco. Presumibilmente se trovi una parola che Chrome non si divide correttamente, potresti inviare una patch all'ICU per aggiungere quella parola.



ICU e progetti simili sono in circolazione da molto tempo. Non sarei sorpreso se il motore V8 di Chrome lo rilevasse dopo che sono passati da WebKit, che ha avuto origine su piattaforme in cui i motori di testo standard eseguono questo tipo di tokenizzazione da quasi 20 anni.
rickster
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.