Como o Chrome decide o que destacar quando você clica duas vezes em texto em japonês?


214

Se você clicar duas vezes no texto em inglês no Chrome, a palavra delimitada por espaços em branco em que você clicou será destacada. Isto não é surpreendente. No entanto, no outro dia, eu estava clicando enquanto lia um texto em japonês e percebi que algumas palavras estavam destacadas nos limites das palavras, mesmo que o japonês não tenha espaços. Aqui está um exemplo de texto:

ど こ で 生 れ 見 当 が つ ぬ。 何 で も 薄 暗 い じ め じ し し た 所 で ニ ー ー ー し け け け け け け け け け け け.

Por exemplo, se você clicar em 薄 暗 い, o Chrome a destacará corretamente como uma única palavra, mesmo que não seja uma classe de caractere único (essa é uma mistura de kanji e hiragana). Nem todos os destaques estão corretos, mas não parecem aleatórios.

Como o Chrome decide o que destacar aqui? Tentei pesquisar na "fonte em japonês" a fonte do Chrome, mas só encontrei testes para um módulo experimental que não parece ativo na minha versão do Chrome.


1
@ Nathaniel Não sei como é para você, mas quando clico duas vezes no kanji, ele seleciona apenas o kanji, e quando clico duas vezes nos hiragana, ele seleciona apenas hiragana consecutivos e o mesmo por um tempo. de katakana (nya nya)
Strawberry

4
A parte じ め じ め し た é uma boa parte para testar se o navegador está realmente fazendo a seleção inteligente de palavras, em vez de apenas interromper a seleção nos limites de kana / kanji / rōmaji. É tudo hiragana, mas o Chrome (e o Safari) selecionam corretamente apenas a parte じ め じ め (a parte is た é uma inflexão de verbo). Por outro lado, o Firefox seleciona incorretamente い じ め じ め し (porque o Firefox não reconhece os limites reais das palavras, mas aparentemente apenas interrompe a seleção nos limites kana / kanji / rōmaji).
sideshowbarker

2
@ Morango eu vejo. Para mim, seleciona a palavra 薄 暗 い, conforme descrito na pergunta. (Chrome, Mac.)
Nathaniel

1
Com uma exceção, em todos os aplicativos do macOS que eu testei - TextEdit, Stickies, Notes, Terminal etc. - clique duas vezes na seleção inteligente de palavras em texto em japonês, conforme o esperado. Portanto, no macOS, pelo menos, o Chrome não está fazendo nada de especial por isso que praticamente todos os outros aplicativos do macOS também não estão fazendo - está apenas usando o suporte à quebra de palavras existente baseado em ICU incorporado ao macOS.
sideshowbarker

1
No macOS, o Firefox é a única exceção que encontrei à regra de que os aplicativos macOS podem fazer o mesmo tipo de seleção inteligente de palavras com duplo clique do texto em japonês descrito nesta pergunta. O Firefox parece fazer apenas a coisa mais simples de parar a seleção nos limites de kana / kanji / rōmaji. Fui informado por um engenheiro do Firefox porque o Firefox não usa as APIs da plataforma macOS baseadas em ICU para seleção de texto. Veja bug relacionado relacionado bugzil.la/345823 .
sideshowbarker

Respostas:


165

Acontece que a v8 tem um segmentador de palavras em vários idiomas não padrão e lida com o japonês.

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

Eu também fiz um jsfiddle que mostra isso.

A qualidade não é incrível, mas estou surpreso que isso seja suportado.


24
Isso faz parte do projeto da UTI: userguide.icu-project.org/boundaryanalysis , consulte também unicode.org/reports/tr29/#Word_Boundaries
Xorlev

10
Consulte também source.chromium.org/chromium/chromium/src/+/master:v8/src/… para saber onde está conectado.
Xorlev

4
O Windows já tem a capacidade de selecionar a palavra correta ao clicar duas vezes em uma palavra japonesa. Você nem precisa do Chrome para isso
phuclv

7
@ phuclv: nem todo mundo que usa o Chrome executa no Windows.
Sean

2
Tem certeza de que o comportamento da v8 afeta a seleção de texto na interface do usuário do navegador? Dado que a v8 é um mecanismo JavaScript, eu não acho que algum código da v8 esteja sendo executado enquanto você faz a seleção de texto na interface do usuário do navegador. Eu acho que você pode verificar desativando o JavaScipt no navegador e ver se você observa o mesmo comportamento. Caso contrário, acho que isso mostraria que o comportamento não se deve à v8. (Eu faria isso a mim mesmo para testá-lo, mas como eu observado no outro comentário, no meu ambiente de MacOS, isso já funciona independentemente de qual teste de navegador I in -. Não apenas no Chrome)
sideshowbarker

92

Com base nos links publicados por JonathonW , a resposta se resume basicamente a: "Há uma grande lista de palavras em japonês e o Chrome verifica se você clicou duas vezes em uma palavra".

Especificamente, a v8 usa a ICU para executar várias tarefas de processamento de texto relacionadas ao Unicode, incluindo dividir o texto em palavras . O código de detecção de limite da ICU inclui um "BreakIterator baseado em dicionário" para idiomas que não têm espaços, incluindo japonês, chinês, tailandês etc.

E para o seu exemplo específico de "薄 暗 い", você pode encontrar essa palavra no dicionário combinado chinês-japonês enviado pela ICU (linha 255431). Atualmente, existem 315.671 total de palavras em chinês / japonês na lista. Presumivelmente, se você encontrar uma palavra que o Chrome não se divide corretamente, você poderá enviar à ICU um patch para adicionar essa palavra.



UTI e projetos similares existem há muito tempo. Não ficaria surpreso se o mecanismo V8 do Chrome o capturasse após a transição do WebKit, que se originou em plataformas nas quais os mecanismos de texto padrão fazem esse tipo de tokenização há quase 20 anos.
rickster
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.