일본어 텍스트를 두 번 클릭하면 Chrome에서 강조 표시 할 내용을 어떻게 결정합니까?


214

Chrome에서 영어 텍스트를 두 번 클릭하면 클릭 한 공백으로 구분 된 단어가 강조 표시됩니다. 이것은 놀라운 일이 아닙니다. 그러나 다른 날에는 일본어로 일부 텍스트를 읽는 동안 클릭했으며 일본어에 공백이 없어도 일부 단어가 단어 경계에 강조 표시되어 있음을 알았습니다. 예제 텍스트는 다음과 같습니다.

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

예를 들어 薄 暗 い를 클릭하면 Chrome에서 단일 문자 클래스가 아니더라도 한 단어로 올바르게 강조 표시합니다 (한자 및 히라가나가 혼합되어 있음). 모든 하이라이트가 올바른 것은 아니지만 무작위로 보이지는 않습니다.

Chrome은 여기서 강조 표시 할 사항을 어떻게 결정하나요? Chrome 소스에서 '일본어 단어'를 검색하려고했지만 내 Chrome 버전에서 작동하지 않는 실험 모듈에 대한 테스트 만 찾았습니다 .


1
@Nathaniel 나는 그것이 당신을위한 방법을 모르겠지만, 한자를 두 번 클릭하면 한자를 선택하고, 히라가나에서 두 번 클릭하면 연속 히라가나 만 선택하고 약간 동일합니다. of katakana (nya nya)
딸기

4
じ め じ め し た 부분은 가나 / 간지 / 로마 지 경계에서 선택을 중지하는 대신 브라우저가 실제로 지능적인 단어 선택을 수행하는지 테스트하는 데 사용하기에 좋은 부분입니다. 그것은 모두 히라가나이지만 Chrome (및 Safari)은 じ め じ め 부분을 올바르게 선택합니다 (し た 부분은 동사 변곡입니다). 반면에 Firefox는 い じ め じ め し た를 잘못 선택합니다 (Firefox는 실제 단어 경계를 전혀 인식하지 못하지만 kana / kanji / rōmaji 경계에서 선택을 중지하기 때문입니다).
sideshowbarker

2
@Strawberry 알겠습니다. 나를 위해 그것은 질문에 설명 된 것처럼 단어 薄 暗 い를 선택합니다. (Chrome, Mac.)
Nathaniel

1
예외적으로, 테스트 한 모든 macOS 응용 프로그램 (TextEdit, Stickies, Notes, Terminal 등)에서 일본어 텍스트의 지능적인 단어 선택을 두 번 클릭하면 예상대로 작동합니다. 따라서 macOS에서 적어도 Chrome은 다른 모든 macOS 앱이 수행하지 않는 특별한 작업을 수행하지 않습니다. macOS에 내장 된 기존 ICU 기반 단어 분리 지원 만 사용합니다.
sideshowbarker

1
macOS에서 Firefox는 macOS 앱 이이 질문에 설명 된 일본어 텍스트의 동일한 두 번 클릭 지능형 단어 선택을 수행 할 수 있다는 예외를 발견했습니다. 파이어 폭스는 가나 / 간지 / 로마 지 경계에서 선택을 멈추는 것보다 훨씬 간단한 일을하는 것 같습니다. 파이어 폭스는 텍스트 선택을 위해 내장 ICU 기반 macOS 플랫폼 API를 사용하지 않기 때문에 파이어 폭스 엔지니어에게 들었습니다. 관련 bug bugzil.la/345823을 참조하십시오 .
sideshowbarker

답변:


165

따라서 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 을 만들었습니다 .

품질은 놀랍지 않지만 이것이 지원되는 것에 놀랐습니다.



10
배선 된 곳 은 source.chromium.org/chromium/chromium/src/+/master:v8/src/… 도 참조하십시오 .
Xorlev

4
Windows는 이미 일본어 단어를 두 번 클릭 할 때 올바른 단어를 선택할 수 있습니다. 이를 위해 Chrome이 필요하지 않습니다.
phuclv

7
@phuclv : Chrome을 사용하는 모든 사람이 Windows에서 Chrome을 실행하는 것은 아닙니다.
Sean

2
v8 동작이 브라우저 UI의 텍스트 선택에 영향을 줍니까? v8은 JavaScript 엔진이므로 브라우저 UI에서 텍스트 선택을 수행하는 동안 v8 코드가 실행될 것이라고 생각하지 않습니다. 브라우저에서 JavaScipt를 비활성화 한 다음 동일한 동작이 관찰되는지 확인할 수 있습니다. 그렇지 않으면 v8 때문이 아니라고 생각합니다. (내가 직접 테스트 해 보았지만, 다른 의견에서 언급했듯이, macOS 환경에서 이것은 Chrome뿐만 아니라 테스트 한 브라우저에 관계없이 이미 작동합니다.)
sideshowbarker

92

JonathonW에 의해 게시 된 링크를 기반으로 한 대답은 기본적으로 "일본어 단어가 많으며 Chrome에서 단어를 두 번 클릭했는지 확인합니다."로 요약됩니다.

특히, v8은 ICU 를 사용 하여 텍스트를 단어로 나누는 것을 포함 하여 많은 유니 코드 관련 텍스트 처리 작업을 수행합니다 . ICU 경계 감지 코드에는 일본어, 중국어, 태국어 등 공백이없는 언어에 대한 "사전 기반 BreakIterator"가 포함 되어 있습니다.

그리고 "薄 暗 い"의 구체적인 예를 들어, ICU가 제공 한 중국어-일본어 사전 에서 해당 단어를 찾을 수 있습니다 (라인 255431). 현재 목록에 총 315,671 개의 중국어 / 일본어 단어가 있습니다. Chrome이 제대로 분리되지 않은 단어를 찾으면 해당 단어를 추가하기 위해 ICU에 패치를 보낼 수 있습니다.



ICU 및 이와 유사한 프로젝트는 오랫동안 사용되어 왔습니다. Chrome의 V8 엔진이 표준 텍스트 엔진이 거의 20 년 동안 이런 종류의 토큰 화를 수행 한 플랫폼에서 시작된 WebKit에서 전환 한 후 그것을 선택했을 때 놀라지 않을 것입니다.
rickster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.