Chrome ตัดสินใจเลือกสิ่งที่จะเน้นเมื่อคุณคลิกสองครั้งที่ข้อความภาษาญี่ปุ่น


214

หากคุณดับเบิลคลิกที่ข้อความภาษาอังกฤษใน Chrome คำที่คั่นด้วยช่องว่างที่คุณคลิกจะถูกเน้น มันไม่น่าแปลกใจ อย่างไรก็ตามเมื่อวันก่อนฉันคลิกขณะอ่านข้อความภาษาญี่ปุ่นและสังเกตว่าบางคำถูกเน้นที่ขอบเขตของคำแม้ว่าภาษาญี่ปุ่นจะไม่มีช่องว่าง นี่คือตัวอย่างข้อความ:

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

ตัวอย่างเช่นหากคุณคลิกที่薄暗い Chrome จะเน้นอย่างถูกต้องเป็นคำเดียวแม้ว่าจะไม่ใช่คลาสตัวอักษรเดียว (นี่คือการผสมผสานระหว่างตัวอักษรคันจิและฮิระงะนะ) ไม่ใช่ไฮไลท์ทั้งหมดที่ถูกต้อง แต่ดูเหมือนจะไม่สุ่ม

Chrome ตัดสินใจว่าจะเน้นที่นี่อย่างไร ฉันพยายามค้นหาคำภาษาญี่ปุ่น "แหล่งที่มาของ Chrome" แต่พบเฉพาะการทดสอบสำหรับโมดูลทดลองที่ดูเหมือนว่าจะไม่ทำงานใน Chrome รุ่นที่ฉันใช้งานอยู่


1
@ นาธาเนียลฉันไม่รู้ว่ามันเป็นอย่างไรสำหรับคุณ แต่เมื่อฉันดับเบิลคลิกที่ตัวคันจิมันจะเลือกตัวอักษรคันจิเท่านั้นและเมื่อฉันคลิกสองครั้งในฮิระงะนะ of katakana (nya nya)
สตรอเบอร์รี่

4
ส่วนじめじめしたเป็นส่วนที่ดีที่จะใช้ในการทดสอบว่าเบราว์เซอร์กำลังทำการเลือกคำที่ชาญฉลาดมากกว่าแค่หยุดการเลือกที่ขอบเขต kana / kanji / rōmaji มันคือฮิรางานะทั้งหมด แต่ Chrome (และ Safari) ให้เลือกส่วน correctly めじめอย่างถูกต้อง (ส่วน is たเป็นคำผันคำกริยา) Firefox ในอีกด้านหนึ่งเลือกผิดいじめじめした (เพราะ Firefox ไม่รู้จักขอบเขตคำที่แท้จริงเลย แต่เห็นได้ชัดว่าเพิ่งหยุดการเลือกที่ขอบเขต kana / kanji / rōmaji)
sideshowbarker

2
@ สตรอเบอร์รี่ฉันเห็น สำหรับฉันมันเลือกคำว่า薄暗いตามที่อธิบายไว้ในคำถาม (Chrome, Mac.)
Nathaniel

1
ด้วยข้อยกเว้นเดียวในทุกแอป macOS ที่ฉันได้ทำการทดสอบ - TextEdit, Stickies, Notes, Terminal และอื่น ๆ - ดับเบิลคลิกที่การเลือกคำอัจฉริยะของข้อความภาษาญี่ปุ่นทำงานตามที่คาดไว้ ดังนั้นอย่างน้อยสำหรับ macOS Chrome ไม่ได้ทำอะไรเป็นพิเศษสำหรับสิ่งนี้ที่แอป macOS อื่น ๆ แทบทั้งหมดไม่ได้ทำด้วย - เพียงแค่ใช้การสนับสนุนการแบ่งคำที่อ้างอิงจาก ICU ที่มีอยู่ใน macOS
sideshowbarker

1
สำหรับ macOS นั้น Firefox เป็นข้อยกเว้นเพียงข้อเดียวที่ฉันได้พบกับกฎที่ว่าแอพ macOS สามารถเลือกคำภาษาอังกฤษแบบดับเบิลคลิกได้อย่างชาญฉลาดเช่นเดียวกับที่อธิบายไว้ในคำถามนี้ Firefox ดูเหมือนจะทำสิ่งที่ง่ายกว่ามากเพียงแค่หยุดการเลือกที่ขอบเขต kana / kanji / rōmaji ฉันได้รับการบอกเล่าจากวิศวกร Firefox ว่าเป็นเพราะ Firefox ไม่ได้ใช้ API แพลตฟอร์ม macOS บน ICU สำหรับการเลือกข้อความ ดูข้อผิดพลาดที่เกี่ยวข้อง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ที่แสดงสิ่งนี้

คุณภาพไม่น่าทึ่ง แต่ฉันประหลาดใจที่ได้รับการสนับสนุนทั้งหมด


24
นี่เป็นส่วนหนึ่งของโครงการ ICU: userguide.icu-project.org/boundaryanalysisโปรดดูunicode.org/reports/tr29/#Word_Boundaries
Xorlev

10
โปรดดู source.chromium.org/chromium/chromium/src/+/master:v8/src/…สำหรับที่ที่มีการเชื่อมต่อ
Xorlev

4
Windows มีความสามารถในการเลือกคำที่ถูกต้องเมื่อดับเบิลคลิกที่คำภาษาญี่ปุ่น คุณไม่จำเป็นต้องใช้ Chrome สำหรับสิ่งนี้ด้วย
ซ้ำ

7
@phuclv: ไม่ใช่ทุกคนที่ใช้ Chrome ที่ทำงานบน Windows
ฌอน

2
คุณแน่ใจหรือว่าพฤติกรรม v8 มีผลต่อการเลือกข้อความใน UI ของเบราว์เซอร์? เนื่องจากเครื่องมือ JavaScript ของ v8 นั้นฉันไม่คิดว่ารหัส v8 ใด ๆ จะทำงานในขณะที่คุณเลือกข้อความใน UI ของเบราว์เซอร์ ฉันเดาว่าคุณสามารถตรวจสอบได้โดยปิดการใช้งาน JavaScipt ในเบราว์เซอร์แล้วดูว่าคุณสังเกตเห็นพฤติกรรมแบบเดียวกันหรือไม่ หากคุณไม่ทำเช่นนั้นฉันคิดว่าจะแสดงพฤติกรรมไม่ได้เกิดจาก v8 (ฉันจะทำเองเพื่อทดสอบ แต่ตามที่ฉันบันทึกไว้ในความคิดเห็นอื่นในสภาพแวดล้อม macOS ของฉันมันใช้งานได้แล้วโดยไม่คำนึงถึงเบราว์เซอร์ที่ฉันทดสอบ - ไม่ใช่เฉพาะใน Chrome)
sideshowbarker

92

ตามลิงก์ที่โพสต์โดย JonathonWคำตอบนั้นเป็นคำตอบ:“ มีรายการคำศัพท์ภาษาญี่ปุ่นจำนวนมากและการตรวจสอบ Chrome เพื่อดูว่าคุณคลิกสองครั้งในคำเดียวหรือไม่”

โดยเฉพาะการใช้ v8 ห้องไอซียูที่จะทำพวงของ Unicode ที่เกี่ยวข้องกับสิ่งที่การประมวลผลข้อความรวมทั้งหมดข้อความขึ้นมาเป็นคำพูด รหัสการตรวจจับขอบเขตของ ICU รวมถึง"ตัวแบ่งตามพจนานุกรม"สำหรับภาษาที่ไม่มีช่องว่างรวมถึงญี่ปุ่นจีนไทย ฯลฯ

และสำหรับตัวอย่างเฉพาะของคุณ "薄暗い" คุณจะพบคำนั้นในพจนานุกรมจีน - ญี่ปุ่นรวมที่จัดส่งโดย ICU (บรรทัด 255431) ขณะนี้มีคำศัพท์ภาษาจีน / ญี่ปุ่นทั้งหมด 315,671 รายการ สันนิษฐานว่าหากคุณพบคำที่ Chrome ไม่แยกอย่างถูกต้องคุณสามารถส่ง ICU เพื่อแก้ไขเพื่อเพิ่มคำนั้น



ห้องไอซียูและโครงการที่คล้ายกันได้รับรอบเป็นเวลานาน ฉันจะไม่แปลกใจถ้าเครื่องยนต์ V8 ของ Chrome มารับหลังจากที่พวกเขาเปลี่ยนจาก WebKit ซึ่งมาจากแพลตฟอร์มที่เอ็นจิ้นข้อความมาตรฐานทำโทเค็นแบบนี้มาเกือบ 20 ปีแล้ว
rickster
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.