Changes from 0.1.13
* Fix crash on corrupted dictionary file; now it fails quietly instead.
* License clarification on individual source files.
* Updated word break dictionary.
Download
ftp://linux.thai.net/pub/thailinux/software/libthai/libthai-0.1.14.tar.gz
MD5 Sums:
34f64b37ed8f8f49f4a18ae972e6f41e libthai-0.1.14.tar.gz
SVN
$ svn co http://linux.thai.net/svn/software/libthai/tags/r_0_1_14 \
libthai-0.1.14
--
คุณได้รับข้อความนี้เนื่องจากคุณสมัครรับข้อมูลจากกลุ่ม "Thai Linux/FOSS developers" ของ Google Groups
หากต้องการโพสต์ถึงกลุ่มนี้ ให้ส่งอีเมลไปที่ thai-linux...@googlegroups.com
หากต้องการยกเลิกการสมัครสำหรับกลุ่มนี้ โปรดส่งอีเมลไปที่ thai-linux-foss-...@googlegroups.com
สำหรับตัวเลือกเพิ่มเติม โปรดเข้าสู่กลุ่มนี้ที่ http://groups.google.com/group/thai-linux-foss-devel?hl=th
> ช่วงนี้ผมกำลังศึกษาวิธีการในการทานพระไตรปิฎก จึงได้ทดสอบเทียบระหว่าง ICU กับ
> LibThai โดยใช้ภาษาไพธอนในการทำงาน
>
> รุ่นของ libthai คือ
> libthai0 0.1.14-2
> libthai-dev 0.1.14-2
> โดยติดตั้งจากตัว binding ที่คุณวีร์ทำไว้
> (https://veer66.wordpress.com/2009/03/10/%E0%B9%83%E0%B8%8A%E0%B9%89-libthai-%E0%B8%88%E0%B8%B2%E0%B8%81-python/)
>
> และรุ่นของ icu คือ
> python-pyicu 1.0-1+b1
>
> ผลการทดสอบพบว่า libthai มีการตัดคำได้ดีกว่า icu มากครับ
>
> แต่ยังพบปัญหาบ้างดังนี้
> - ไม่แยกสัญญลักษณ์ออกจากตัวอักษร ทำให้การตีความศัพท์นั้น ๆ ผิดไป
> (ไม่แน่ใจว่า libthai ตัวต้นฉบับเป็นไหม)
ตรงนี้ต้องอธิบายก่อนว่า libthai ตัดคำเพื่อแบ่งบรรทัดครับ ไม่ใช่เพื่อแยกคำ
สำหรับการแปลความหมาย ดังนั้น จะมีหลายจุดที่ไม่แบ่งหลังเครื่องหมาย
เพราะไม่ใช่จุดแบ่งบรรทัด เช่น หลังวงเล็บเปิด
> - ไม่ตัดช่องว่างที่เป็นวรรค
เรื่องนี้เจอบ้างเหมือนกันครับ คิดว่าคงมีอะไรไม่ตรงกันระหว่าง spec ของ
ยูนิโค้ดที่ pango ใช้ กับการใช้งานทั่วไป ทั้งนี้ มีสมมุติฐานอยู่แล้วว่าโปรแกรม
ทั่วไปจะตัดบรรทัดที่ช่องว่างอยู่แล้ว แล้ว libthai ไปเพิ่มจุดแบ่งคำภายใน
ก้อนข้อความภาษาไทยอีกที
ไว้เดี๋ยวตรวจสอบโดยละเอียดอีกทีครับ
> ส่วนปัญหาอื่น ๆ คือการเพิ่ม/ลดศัพท์ เป็นเรื่องรอง คิดว่าค่อย ๆ
> ปรับปรุงไปได้ครับ
ครับ ก็ยังมีการปรับพจนานุกรมอยู่เรื่อย ๆ มีอะไรก็เสนอแนะเข้ามาได้ครับ
> ผมได้แนบไฟล์ตัวอย่าง diff.txt ซึ่งผมเติมความเห็นไว้ในนั้นแล้ว
> และโค๊ดไพธอนทีใช้ในการตรวจคือ dthbrk_diff.py ก็ได้แนบไว้เช่นกันครับ
ผมตอบเป็นกรณี ๆ ดังนี้:
> input: คำถามและคำตอบ
> pyicu: คำถาม และ คำ ตอบ
> libthai: คำ ถาม และ คำตอบ
> (น่าจะแยกทั้งหมด หรือรวมทั้ง)
เกิดจากการเพิ่มคำว่า "คำตอบ" ในพจนานุกรม แต่ไม่ได้เพิ่ม "คำถาม"
แต่ขอตัดสินใจลบคำว่า "คำตอบ" ออกครับ
> input: ๑.
> pyicu: ๑ .
> libthai: ๑.
> (ควรแยก . ออก)
จุด (.) ไม่ใช่จุดแบ่งบรรทัดครับ ถ้าแยกลงมาบรรทัดใหม่จะเพี้ยนไป
> input: ความคิดถึงธรรม
> pyicu: ความ คิดถึง ธรรม
> libthai: ความคิด ถึง ธรรม
> ()
พูดยากครับ ในบริบทนี้ "ความคิด-ถึง-ธรรม" น่าจะตรงกว่า แต่ในบริบทอื่น
การจัด "คิดถึง" ไว้ด้วยกันอาจจะเหมาะกว่า ซึ่งต้องตัดสินด้วย heuristic อื่น
ที่เรายังไม่มี
> input: ในสมณพราหมณ์และคนที่ควร
> pyicu: ใน สมณ พราหมณ์ และ คน ที่ ควร
> libthai: ใน สม ณ พราหมณ์ และ คน ที่ ควร
> ()
เพิ่ม "สมณพราหมณ์" ในพจนานุกรมแล้ว
> input: (เงิน)
> pyicu: ( เงิน )
> libthai: (เงิน)
> (ควรแยกวงเล็บออกจากอักษร)
หลังวงเล็บเปิดและหน้าวงเล็บปิดไม่ควรแบ่งบรรทัดครับ
> input: ผู้ถูกคล้องคอด้วยพวงมาลัยสีแดงห่าง
> pyicu: ผู้ ถูก คล้อง คอ ด้วย พวง มาลัย สี แดง ห่าง
> libthai: ผู้ ถูก คล้อง คอ ด้วย พวงมาลัย สี แดง ห่าง
> (พวงมาลัย น่าจะแยก)
การแยกอาจจะเหมาะสำหรับพวงมาลัยดอกไม้ แต่พวงมาลัยรถยนต์
ควรเป็นคำเดียวครับ
> input: "ได้ยินว่า
> pyicu: " ได้ยิน ว่า
> libthai: "ได้ยิน ว่า
> (ควรแยกเครื่องหมายออกจากอักษร)
เช่นเดียวกับวงเล็บ
> input: ในวันที่
> pyicu: ใน วัน ที่
> libthai: ใน วันที่
> (น่าแยก "วันที่" ?)
ที่เพิ่ม "วันที่" เข้าพจนานุกรมเพราะมีคำว่า "วันที่" (date) เช่นในประโยค
"กรุณาป้อนวันที่" แต่ในบางบริบทก็ควรแยก "วัน-ที่" อันนี้ก็ยังตัดสินใจ
ไม่ถูกครับ
> input: เทพบุตรพานางไปพักไว้ท้ายบริษัท
> pyicu: เทพ บุตร พา นาง ไป พัก ไว้ ท้าย บริษัท
> libthai: เทพบุตร พา นาง ไป พัก ไว้ ท้าย บริษัท
>
> input: ได้กล่าวกะเทวบุตรนั้นว่า
> pyicu: ได้ กล่าว กะ เทว บุตร นั้น ว่า
> libthai: ได้ กล่าว กะ เท ว บุตร นั้น ว่า
> (เทวบุตร - เทพบุตร)
เพิ่ม "เทวบุตร" แล้ว
> input: ดีละเทวดา
> pyicu: ดีละ เทวดา
> libthai: ดี ละ เทวดา
> (น่าเพิ่มคำ "ดีละ")
คิดว่าไม่ควรเพิ่ม เพราะ "ดี" กับ "ละ" เป็นคนละคำกัน
> input: จึงได้คิดว่า
> pyicu: จึง ได้ คิด ว่า
> libthai: จึง ได้คิด ว่า
> (น่าจะแยก ?)
"ได้คิด" อยู่ในพจนานุกรมราชบัณฑิตยสถาน เป็นกริยาวลี แต่ในหลายบริบท
เช่นตัวอย่างข้างต้นควรแยกเป็นคนละคำ -> ตัดออกครับ
> input: ท่านผู้สิ้นอาสวะทั้งหลายเหล่านั้น
> pyicu: ท่าน ผู้ สิ้น อา สวะ ทั้ง หลาย เหล่า นั้น
> libthai: ท่าน ผู้ สิ้น อา สวะ ทั้งหลาย เหล่า นั้น
> (น่าเพิ่ม "อาสวะ" เพราะแพร่หลาย)
เพิ่มแล้วครับ
> input: ฉันใด
> pyicu: ฉันใด
> libthai: ฉัน ใด
> (น่าเพิ่ม "ฉันใด" ?)
คิดว่าเป็นคนละคำแยกกันครับ ไม่ควรเพิ่ม
> input: เหมือนทรากศพ
> pyicu: เห มือ นท ราก ศพ
> libthai: เหมือน ท ราก ศพ
> (ทรากศพ เขียนแบบโบราณ)
เพิ่มแล้วครับ
> input: ผู้ได้ทิพยสมบัติ
> pyicu: ผู้ ได้ ทิพย สมบัติ
> libthai: ผู้ ได้ ทิพ ย สมบัติ
> (ทิพยสมบัติ เขียนแบบสันสกฤต ควรเพิ่ม ?)
เพิ่มแล้วครับ
> input: ทรงปรารภทานของท่านอนาถปิณฑิกคฤหบดี
> pyicu: ทรง ปรารภ ทาน ของ ท่า นอ นาถ ปิณฑิก คฤหบดี
> libthai: ทรง ปรารภ ทาน ของ ท่าน อนาถ ปิณฑิก คฤหบดี
>
> input: ในเรือนของท่านอนาถปิณฑิกคฤหบดี.
> pyicu: ใน เรือน ของ ท่า นอ นาถ ปิณฑิก คฤหบดี .
> libthai: ใน เรือน ของ ท่าน อนาถ ปิณฑิกคฤหบดี.
> (การไม่แยก . ออก ทำให้การตัดคำเพี้ยนไป)
เป็นคนละส่วนกันครับ กรณีนี้ "ปิณฑิก" คือคำที่ไม่มีในพจนานุกรม
อัลกอริทึมจะพยายามหาขอบเขตของคำที่ว่านี้ ซึ่งบังเอิญทั้งสองกรณี
ตรวจพบคำถัดไปไม่เหมือนกัน แต่ไม่ได้เกิดจากเครื่องหมายจุด เพราะ
ทำในคนละขั้นตอนกัน
> input: ซึ่งเป็นลูกสาวของหลานของข้าพระองค์,
> pyicu: ซึ่ง เป็น ลูกสาว ของ หลาน ของ ข้า พระองค์ ,
> libthai: ซึ่ง เป็น ลูก สาว ของ หลาน ของ ข้า พระองค์,
> (น่าเพิ่ม "ลูกสาว" ?)
เพิ่มแล้วครับ
> input: นี้เป็นธรรมดาในข้อนั้นว่า
> pyicu: นี้ เป็น ธรรมดา ใน ข้อ นั้น ว่า
> libthai: นี้ เป็นธรรม ดา ใน ข้อ นั้น ว่า
> (น่าตัดศัพท์ "เป็นธรรม" ออก ?
> ตัวอย่างคือ เป็นธรรมชาติ เป็นธรรมเอก เป็นธรรมปฏิบัติ ฯ)
ตัดออกแล้วครับ
> input: ทรงครองราชสมบัติในพระนครนั้น.
> pyicu: ทรง ครอง ราช สมบัติ ใน พระนคร นั้น .
> libthai: ทรง ครอง ราชสมบัติ ใน พระ นคร นั้น.
>
> input: พระองค์ได้มีพระราชเทวี
> pyicu: พระองค์ ได้ มี พระ ราชเทวี
> libthai: พระองค์ ได้ มี พระ ราช เทวี
> (ราชสมบัติ - ราชเทวี ควรแยกทั้งคู่หรือรวมทั้งคู่ นอกจากนี้ยังมี ราช- อีกมากมาย)
เนื่องจากมี ราช- มากมาย ความจริงควรจะเก็บให้ครบ แต่ด้วยข้อจำกัดเรื่อง
เนื้อที่ ก็เลยเก็บเฉพาะเท่าที่มีในพจนานุรม รถ. ครับ
> input: พระเจ้าชัยเสนเกิดความเห็นแก่ตัวขึ้นว่า
> pyicu: พระเจ้า ชัย เสน เกิด ความ เห็น แก่ ตัว ขึ้น ว่า
> libthai: พระเจ้า ชัย เสน เกิด ความเห็น แก่ ตัว ขึ้น ว่า
> (น่าตัดศัพท์ "ความเห็น" และ/หรือ เพิ่ม "เห็นแก่" ? ...กรณีนี้ไม่แน่ใจครับ)
ถ้าเก็บทั้งสองคำ มันจะตัดเป็น "ความเห็น-แก่-ตัว" เพราะ match คำยาวก่อน
ในกรณีที่จำนวนคำเท่ากันครับ (ปัจจุบันเก็บทั้งคู่) อันนี้ยังตัดสินใจไม่ถูก
เหมือนกันว่าควรตัด "ความเห็น" ออกหรือไม่
> input: เลือกเอาอย่างอื่นเถิด.
> pyicu: เลือก เอา อย่าง อื่น เถิด .
> libthai: เลือก เอาอย่าง อื่น เถิด.
> (ตัดศัพท์ "เอาอย่าง" ?)
ตอนนี้มีทั้ง "เอาเยี่ยง" และ "เอาอย่าง" ในพจนานุกรม มาเจอกรณีอย่างนี้
ก็คิดว่าควรตัด "เอาอย่าง" ออกเหมือนกันครับ
> input: พระราชากราบทูลว่า
> pyicu: พระ ราชา กราบทูล ว่า
> libthai: พระ ราชา กราบ ทูล ว่า
> (เพิ่ม "กราบทูล" ?)
คิดว่าแยกคำดีอยู่แล้วครับ
> input: จึงตรัสกึ่งคาถาเบื้องต้น
> pyicu: จึง ตรัส กึ่ง คาถา เบื้อง ต้น
> libthai: จึง ตรัส กึ่ง คาถา เบื้องต้น
> (ตัดศัพท์ "เบื้องต้น" "เบื้องกลาง" "เบื้องปลาย" "เบื้องสูง" "เบื้องต่ำ" ออก ? ...ไม่แน่ใจ)
มีคำว่า "เบื้องต้น" (basic) ที่ทำให้เก็บคำนี้ไว้ แต่ในที่นี้หมายถึง
"คาถาข้างต้น"
ใช่ไหมครับ?
> input: ขอจงมีชีวิตยืนนาน
> pyicu: ขอ จง มี ชีวิต ยืนนาน
> libthai: ขอ จง มี ชีวิต ยืน นาน
> (เพิ่ม "ยืนนาน" "ยืนยาว" "ยืนพื้น" "ยืนยัน" "ยืนหยัด" ? ...ไม่แน่ใจ)
เป็นคำซ้อนที่ไม่จำเป็นต้องเก็บมั้งครับ
> input: ฯลฯ
> pyicu: ฯลฯ
> libthai: ฯ ลฯ
> (เพิ่ม "ฯลฯ")
ต้องปรับที่อัลกอริทึมด้วยครับ เพราะ "ฯ" เป็นเครื่องหมายวรรคตอน
รับไว้พิจารณาอีกทีครับ
> input: อนึ่งทานที่พวกมนุษย์ให้แล้วแต่
> pyicu: อนึ่ง ทาน ที่ พวก มนุษย์ ให้ แล้ว แต่
> libthai: อนึ่ง ทาน ที่ พวก มนุษย์ ให้ แล้วแต่
> (ตัด "แล้วแต่" ออก ?)
อืม.. คงต้องตัดครับ
> input: คนโน้นชื่อว่าเป็นสหายเพื่อนเล่นฝุ่นด้วยกันของเรา
> pyicu: คน โน้น ชื่อ ว่า เป็น สหาย เพื่อน เล่น ฝุ่น ด้วย กัน ของ เรา
> libthai: คน โน้น ชื่อ ว่า เป็น สหาย เพื่อนเล่น ฝุ่น ด้วย กัน ของ เรา
> (ตัด "เพื่อนเล่น" ออก ?)
ตัดแล้วครับ
> input: มีภรรยาของกฏุมพีคนหนึ่ง
> pyicu: มี ภรรยา ขอ งกฏุม พี คน หนึ่ง
> libthai: มี ภรรยา ขอ งก ฏุม พี คน หนึ่ง
> (เพิ่ม "กฎุมพี")
พจนานุกรม รถ. สะกดสองแบบ คือ กระฎุมพี กับ กุฎุมพี ซึ่ง libthai ก็เก็บคำ
ตามนั้น แต่เห็นว่าตัวสะกด "กฎุมพี" ก็พบบ่อยเหมือนกัน -> เพิ่มแล้วครับ
> input: ได้คิดถึงกรรมชั่วหยาบแก่หญิงร่วมผัว
> pyicu: ได้ คิดถึง กรรม ชั่ว หยาบ แก่ หญิง ร่วม ผัว
> libthai: ได้คิด ถึง กรรม ชั่ว หยาบ แก่ หญิง ร่วม ผัว
> (ตัด "ได้คิด" ออก ?)
ตัดไปแล้วข้างต้นครับ
> input: ผู้รู้แจ้งในข้อนั้น
> pyicu: ผู้ รู้ แจ้ง ใน ข้อ นั้น
> libthai: ผู้รู้ แจ้ง ใน ข้อ นั้น
> (ตัด "ผู้รู้" เติม "รู้แจ้ง")
ปัจจุบันมีทั้งสองคำครับ -> ตัด "ผู้รู้" แล้ว
> input: คร่ำครวญเที่ยวไป.
> pyicu: คร่ำครวญ เที่ยว ไป .
> libthai: คร่ำ ครวญ เที่ยว ไป.
> (เติม "คร่ำครวญ")
เติมแล้วครับ
สรุปการปรับ dict ครับ:
ขอบคุณมากครับ,
เทพ.
--
Theppitak Karoonboonyanan
http://linux.thai.net/~thep/
ตรงนี้ต้องอธิบายก่อนว่า libthai ตัดคำเพื่อแบ่งบรรทัดครับ ไม่ใช่เพื่อแยกคำ
สำหรับการแปลความหมาย ดังนั้น จะมีหลายจุดที่ไม่แบ่งหลังเครื่องหมาย
เพราะไม่ใช่จุดแบ่งบรรทัด เช่น หลังวงเล็บเปิด
สรุปการปรับ dict ครับ:
http://linux.thai.net/websvn/wsvn/software.libthai?op=comp&compare[]=%2Ftrunk@415&compare[]=%2Ftrunk@416
ขอบคุณมากครับ,
เทพ.
--
Theppitak Karoonboonyanan
http://linux.thai.net/~thep/
--
คุณได้รับข้อความนี้เนื่องจากคุณสมัครรับข้อมูลจากกลุ่ม "Thai Linux/FOSS developers" ของ Google Groups
หากต้องการโพสต์ถึงกลุ่มนี้ ให้ส่งอีเมลไปที่ thai-linux...@googlegroups.com
หากต้องการยกเลิกการสมัครสำหรับกลุ่มนี้ โปรดส่งอีเมลไปที่ thai-linux-foss-...@googlegroups.com
สำหรับตัวเลือกเพิ่มเติม โปรดเข้าสู่กลุ่มนี้ที่ http://groups.google.com/group/thai-linux-foss-devel?hl=th