如果您在 Chrome 中双击英文文本,您单击的以空格分隔的单词会突出显示。这并不奇怪。然而,前几天我在阅读一些日语文本时单击并注意到一些单词在单词边界处突出显示,即使日语没有空格。这是一些示例文本:
銇┿亡銇х敓銈屻仧銇嬨仺銈撱仺瑕嫔綋銇屻仱銇嬨伂銆备綍銇с倐钖勬殄銇勩仒銈并仒c銈并仐銇熸墉銇с兖銉嬨儯銉兼常銇勩仸銇勩仧浜嬨仩銇戙伅瑷樻喍銇椼仸銇勩倠銆
例如,如果您单击“钖勬殚銇”,Chrome 会正确地将其突出显示为单个单词,即使它不是单个字符类(这是日本汉字和平假名的混合体)。并非所有的亮点都是正确的,但它们似乎不是随机的。
Chrome 如何决定在这里突出显示什么?我尝试在 Chrome 源代码中搜索“日语单词”,但只找到了对在我的 Chrome 版本中似乎不活跃的实验模块的测试。
所以事实证明 v8 有一个非标准的多语言分词器,它可以处理日语。
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('どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。')) // ["どこ", "で", "生れ", "たか", "とんと", "見当", "が", "つ", "か", "ぬ", "。", "何でも", "薄暗い", "じめじめ", "した", "所", "で", "ニャーニャー", "泣", "い", "て", "いた事", "だけ", "は", "記憶", "し", "て", "いる", "。"]