双击日语文本时,Chrome如何确定突出显示的内容?

2020/10/14 20:01 · javascript ·  · 0评论

如果您在Chrome中双击英文文本,则会高亮显示您单击的空格分隔的单词。这不足为奇。但是,有一天,我在阅读日语的一些文本时单击鼠标,发现即使日语没有空格,某些单词也会在单词边界处突出显示。这是一些示例文本:

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

例如,如果您单击薄暗い,即使它不是单个字符类(这是汉字和平假名的组合),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('どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。'))
// ["どこ", "で", "生れ", "たか", "とんと", "見当", "が", "つ", "か", "ぬ", "。", "何でも", "薄暗い", "じめじめ", "した", "所", "で", "ニャーニャー", "泣", "い", "て", "いた事", "だけ", "は", "記憶", "し", "て", "いる", "。"]

我还做了一个jsfiddle来显示这一点。

质量并不惊人,但我对此感到惊讶,这是完全可以支持的。

根据JonathonW发布的链接,答案基本上可以归结为:“日语单词列表很大,Chrome浏览器会检查您是否双击了单词。”

具体来说,v8使用ICU进行了一堆与Unicode相关的文本处理,包括将文本分解为wordICU边界检测代码包括一个“基于字典的BreakIterator”,用于没有空格的语言,包括日语,中文,泰语等。

对于您的“薄暗い”的特定示例,您可以在ICU发行的汉日组合字典中找到该单词(第255431行)。当前列表中共有315,671个中文/日语单词。据推测,如果您发现Chrome无法正确拆分的单词,则可以向ICU发送补丁程序以添加该单词。

本文地址:http://javascript.askforanswer.com/shuangjiriyuwenbenshichromeruhequedingtuchuxianshideneirong.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!