Если вы дважды щелкните английский текст в Chrome, выделенное вами слово, разделенное пробелами, будет выделено. Это не удивительно. Однако на днях я щелкал мышью, читая текст на японском, и заметил, что некоторые слова были выделены на границах слов, хотя в японском языке нет пробелов. Вот пример текста:

ど こ で 生 れ た た か と ん と 当 が つ か ぬ。 何 薄 暗 い じ め じ め し で ニ ャ ー ニ ャ ー 泣 い 10000

Например, если вы нажмете 薄 暗 い, Chrome правильно выделит его как отдельное слово, даже если это не отдельный символьный класс (это смесь кандзи и хираганы). Не все основные моменты правильные, но они не кажутся случайными.

Как Chrome решает, что здесь выделить? Я попытался найти в исходном коде Chrome слово «японское слово», но нашел только тесты для экспериментального модуля, который, похоже, не активен в моей версии Chrome.

polm23

Ответы (2)

Оказывается, v8 имеет нестандартный многоязычный сегментатор слов и обрабатывает японский язык.

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

  var cur = 0, prev = 0

  while (cur 

Я также сделал jsfiddle, который показывает это.

Качество невысокое, но я удивлен, что это вообще поддерживается.

На основании ссылок , размещенных JonathonW, ответ в основном сводится к следующему: «Там большой список японских слов, и Chrome проверяет, не щелкнули ли вы дважды по слову».

В частности, v8 использует ICU для выполнения множества операций обработки текста, связанных с Unicode, включая разбиение текста на слова. Код определения границ ICU включает «Dictionary-Based BreakIterator» для языков, в которых нет пробелов, включая японский, китайский, тайский и т. Д.

А для вашего конкретного примера «薄 暗 い» вы можете найти это слово в объединенном китайско-японском словаре, отправленном ICU (строка 255431). Всего в списке 315 671 китайское / японское слово. Предположительно, если вы обнаружите слово, которое Chrome не разделяет должным образом, вы можете отправить ICU патч, чтобы добавить это слово.

2022 WebDevInsider