LibThai 0.1.14 Released

72 views
Skip to first unread message

Theppitak Karoonboonyanan

unread,
Feb 28, 2010, 1:23:23 AM2/28/10
to thai-linux...@googlegroups.com
LibThai 0.1.14 Released


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

--
http://linux.thai.net/node/186

widhaya trisarnwadhana

unread,
Dec 27, 2010, 1:13:17 AM12/27/10
to thai-linux...@googlegroups.com
สวัสดีครับ

ช่วงนี้ผมกำลังศึกษาวิธีการในการทานพระไตรปิฎก จึงได้ทดสอบเทียบระหว่าง 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 ตัวต้นฉบับเป็นไหม)
- ไม่ตัดช่องว่างที่เป็นวรรค

ส่วนปัญหาอื่น ๆ คือการเพิ่ม/ลดศัพท์ เป็นเรื่องรอง คิดว่าค่อย ๆ ปรับปรุงไปได้ครับ

ผมได้แนบไฟล์ตัวอย่าง diff.txt  ซึ่งผมเติมความเห็นไว้ในนั้นแล้ว
และโค๊ดไพธอนทีใช้ในการตรวจคือ dthbrk_diff.py ก็ได้แนบไว้เช่นกันครับ

ขอบคุณครับ

วิทยา

เมื่อ 28 กุมภาพันธ์ 2553, 13:23, Theppitak Karoonboonyanan <th...@linux.thai.net> เขียนว่า:

--
คุณได้รับข้อความนี้เนื่องจากคุณสมัครรับข้อมูลจากกลุ่ม "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


diff.txt
dthbrk_diff.py

Theppitak Karoonboonyanan

unread,
Dec 27, 2010, 3:15:21 AM12/27/10
to thai-linux...@googlegroups.com
2010/12/27 widhaya trisarnwadhana <widh...@gmail.com>:

> ช่วงนี้ผมกำลังศึกษาวิธีการในการทานพระไตรปิฎก จึงได้ทดสอบเทียบระหว่าง 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 ครับ:

http://linux.thai.net/websvn/wsvn/software.libthai?op=comp&compare[]=%2Ftrunk@415&compare[]=%2Ftrunk@416

ขอบคุณมากครับ,
เทพ.
--
Theppitak Karoonboonyanan
http://linux.thai.net/~thep/

widhaya trisarnwadhana

unread,
Dec 27, 2010, 4:39:01 AM12/27/10
to thai-linux...@googlegroups.com


เมื่อ 27 ธันวาคม 2553, 15:15, Theppitak Karoonboonyanan <th...@linux.thai.net> เขียนว่า:


ตรงนี้ต้องอธิบายก่อนว่า libthai ตัดคำเพื่อแบ่งบรรทัดครับ ไม่ใช่เพื่อแยกคำ
สำหรับการแปลความหมาย ดังนั้น จะมีหลายจุดที่ไม่แบ่งหลังเครื่องหมาย
เพราะไม่ใช่จุดแบ่งบรรทัด เช่น หลังวงเล็บเปิด

เข้าใจเจตนารมณ์ของ libthai แล้วครับ
(แต่เสียดาย เพราะความสามารถของ 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


สำหรับเรื่องอื่น ๆ คุณเทพอธิบายได้แจ่มแจ้งแล้วครับ
ส่วนงานของผม เดี๋ยวผมปรับแนวเขียนโปรแกรมเอง
เดี๋ยวถ้าพบข้อควรปรับปรุงเพิ่ม

ขอบพระคุณมาก ๆ ครับสำหรับงานชั้นเยี่ยม

วิทยา

widhaya trisarnwadhana

unread,
Dec 27, 2010, 4:41:29 AM12/27/10
to thai-linux...@googlegroups.com
(ขออภัยครับ cookie หมดอายุ ขออนุญาตเพิ่มข้อความครับ)

...
เดี๋ยวถ้าพบข้อควรปรับปรุงเพิ่ม จะแจ้งมาให้ทราบอีกนะครับ
...

วิทยา
Reply all
Reply to author
Forward
0 new messages