Gukhanmun: ไลบรารี Rust/JavaScript สำหรับแปลงข้อความจีน-เกาหลีให้เป็นอักษรฮันกึลล้วน
(gukhanmun.org)สวัสดีครับ ผมได้เปิดตัว Gukhanmun ซึ่งเป็นไลบรารีสำหรับแปลงข้อความจีน-เกาหลีให้เป็นอักษรฮันกึลล้วน หวังว่าจะเป็นประโยชน์เมื่อต้องจัดการข้อความอย่างเอกสารเก่า ข้อมูลภาษาจีน-เกาหลี หนังสือพิมพ์เก่า หรือเอกสารราชการ
ถ้ามองเผิน ๆ อาจคิดว่าแค่ค้นตารางเทียบการอ่านทีละตัวอักษรก็น่าจะพอ แต่พอลงมือทำจริงจะพบได้อย่างรวดเร็วว่าวิธีนั้นให้ผลลัพธ์ที่ถูกต้องได้ยาก แม้จะเป็นอักษรจีนตัวเดียวกัน แต่ถ้าอยู่ต้นคำก็จะมีการใช้กฎการออกเสียงต้นคำ และเมื่อหลายตัวอักษรรวมกันเป็นคำเดียว ก็อาจออกเสียงต่างจากการอ่านแยกทีละตัวได้ เช่น 「庫間」 ไม่ใช่ “gogan” แต่เป็น “gotgan”, 「標識」 ไม่ใช่ “pyosik” แต่เป็น “pyoji” และคำแบบผสมอักษรจีนกับฮันกึลอย่าง 「汽車gil」 จะมีเสียงแทรกจนเป็น “gichatgil” ตัวเลขอักษรจีนก็ซับซ้อนเช่นกัน โดย 「二〇一六年」 ควรเป็น “2016-nyeon” แต่ 「十一月」 คือ “11-wol” และ 「一千二百三十四」 คือ “1234” จึงต้องพิจารณาด้วยว่าแม้จะเป็นรูปแบบตัวเลขเหมือนกัน แต่กำลังใช้ในลักษณะใด
ก่อนหน้านี้ผมเคยสร้างไลบรารี Seonbi เพื่อจุดประสงค์คล้ายกัน แต่ครั้งนี้ได้เขียนใหม่ด้วย Rust โดยโฟกัสที่การแปลงอักษรจีนเป็นหลัก มีพจนานุกรมมาตรฐานภาษาเกาหลีฝังมาในตัว จึงใช้งานได้โดยไม่ต้องติดตั้งพจนานุกรมเพิ่มเติม และรองรับทั้งข้อความทั่วไป HTML และ Markdown ผลลัพธ์สามารถเลือกให้เหลือเฉพาะฮันกึล หรือแสดงกำกับในวงเล็บแบบ hanja(漢字) หรือส่งออกเป็น HTML ruby markup ก็ได้ นอกจากนี้ยังมีพรีเซ็ตการสะกดแบบเกาหลีใต้และเกาหลีเหนือ รวมถึงตัวเลือกให้แสดงอักษรจีนกำกับเมื่อมีคำพ้องเสียงต่างความหมาย
ส่วนที่ใส่ใจมากที่สุดคืออัลกอริทึมการแบ่งคำ วิธีเลือกหน่วยที่ยาวที่สุดจากซ้ายไปขวาจะตัด 「資本論理」 เป็น 「資本論」+「理」 แล้วอ่านเป็น “jabonroni” แต่ Gukhanmun ใช้ dynamic programming (อัลกอริทึม Viterbi) บน lattice เพื่อแบ่งเป็น 「資本」+「論理」 และหาคำอ่านที่ถูกต้องเป็น “jabonnonri”
หนึ่งในเหตุผลที่สร้างด้วย Rust ตั้งแต่แรก คือเพื่อให้นำไปใช้ต่อในหลายภาษาได้ง่าย CLI ดาวน์โหลดได้จาก GitHub Releases, Rust crate gukhanmun ดาวน์โหลดได้จาก crates.io ส่วนฝั่ง JavaScript มีทั้ง WebAssembly(@gukhanmun/wasm) และ Node.js native addon(@gukhanmun/napi) ซึ่งเผยแพร่ไว้ทั้งบน npm และ JSR แล้ว สำหรับ core crate gukhanmun-core ยังรองรับสภาพแวดล้อม no_std + alloc จึงใช้ในงาน embedded ได้ด้วย
- เอกสารและเว็บไซต์: https://gukhanmun.org/ko-KR/
- Playground: https://gukhanmun.org/ko-KR/playground
- GitHub repository: https://github.com/dahlia/gukhanmun
ยังไม่มีความคิดเห็น