New libthai word break in trunk
ทดสอบตัวตัดคำใหม่สำหรับ libthai มาระยะหนึ่ง พอโค้ดเริ่มทำงานเข้าที่เข้าทางก็พยายาม optimize ได้ความเร็วเพิ่มขึ้นทีละขั้น จนเมื่อวันพฤหัสรู้สึกว่าหมดมุกแล้ว ก็เลยจัดการ merge จาก datrie_wbrk-branch เข้า HEAD ซะ แล้วก็จัดโครงสร้างข้อมูลสำหรับสร้างพจนานุกรมใหม่ แยกรายการคำจากราชบัณฑิตออกไปต่างหาก แล้วทำรายการคำที่เพิ่มเติมแยกเป็นหมวดหมู่
สำหรับรายการคำจากราชบัณฑิต ก็เลือกลบคำโบราณและคำที่เลิกใช้แล้วออก ลบคำที่เป็นวลียาวๆ ออก เพิ่มลูกคำบางคำที่เห็นว่าจำเป็น ปรับแต่งเสร็จก็ build พจนานุกรม ใช้กับ firefox + mozlibthai แล้วลองเปิดเว็บต่างๆ ดู เจอจุดที่ตัดแปลกๆ ก็จัดการเก็บคำเข้าพจนานุกรมซะ รวมทั้งนึกคำที่จะเพิ่มเองใส่เข้าไปเรื่อยๆ
พูดถึงตัวโค้ด แน่นอนว่าการแยกพจนานุกรมออกมาต่างหากจากตัวโค้ด คงทำให้ความเร็วลดลงบ้าง รวมทั้งการปรับวิธี match เป็น maximal matching ก็ทำให้กินเวลามากขึ้นด้วย แต่ความถูกต้องน่าจะดีขึ้น และที่สำคัญคือ maintain โค้ดได้ง่ายกว่าเดิม
สำหรับเรื่องประสิทธิภาพ เท่าที่จับเวลาดู ใช้เวลาประมาณ 3.6 เท่าของโค้ดเดิม แต่ขนาดของโค้ดเล็กลงมาก จากเดิม libthai.so ที่ strip แล้ว ขนาดอยู่ที่ 788 KB ตอนนี้เหลือ 26 KB บวกกับ libdatrie.so ที่ใช้อีก 20 KB เป็น 46 KB เท่านั้น เพราะยกพจนานุกรมออกจากโค้ดไปแล้วนั่นเอง โดยขนาดของพจนานุกรมที่สร้างจากรายการคำชุดเดิม ก็มีขนาดรวม 218 KB เมื่อรวมกับโค้ดแล้ว ก็ยังเล็กลงกว่าเดิมอยู่ดี (ใช้ massif ของ valgrind จับดู พบว่าใช้หน่วยความจำขณะทำงานประมาณ 450 KB) แต่ข้อดีที่เห็นได้ชัดจากโครงสร้างใหม่ก็คือ สามารถปรับแต่งพจนานุกรมได้อย่างอิสระ โดยไม่ต้องคอมไพล์ใหม่ เวลาคอมไพล์ลดลง แม้จะบวกเวลาสร้างพจนานุกรมด้วย และโค้ดดูสะอาดขึ้น
แต่ก็อยากเพิ่มความเร็วให้มากกว่านี้ เดี๋ยวทดสอบปรับปรุงไปเรื่อยๆ แต่ตอนนี้ ต้องไปดู GNOME 2.16 ที่จะ tarballs due วันจันทร์นี้ก่อน :-P
2 ความเห็น:
ณ 22 สิงหาคม 2550 เวลา 02:21 , salapao แถลง…
บังเอิญได้เข้ามาอ่านน่ะค่ะ อยากได้ความรู้เกี่ยวกับการสร้างพจนานุกรม ว่าได้ข้อมูลคำศัพท์จากไหน และทำยังไงอ่ะค่ะ จะเอาไปใช้กับโปรเจค ถ้าไม่รบกวนช่วยอธิบายมาให้ในเมลได้มั้ยคะ
kyo_kate@hotmail.com
ณ 21 พฤศจิกายน 2556 เวลา 13:03 , Panupong แถลง…
สวัสดีครับคุณ Thep อยากทราบวิธีเพิ่มหรือลดคำศัพท์ใน libthai สามารถทำได้ไหมครับ พอดีคือต้องการให้ swath ตัดคำ เฉพาะที่ผมอยากให้ตัด เช่นพวก ก็ คือ หรือ ไม่เอาครับ จะเอาแต่คำเฉพาะ และมีความหมาย เลยอยากแก้ lib หรือไม่ วิธีสร้าง lib ตัวใหม่เลยก็ได้ครับ อยากทราบว่ามีวิธีไหมครับ
ขอบคุณครับ
แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)
<< กลับหน้าแรก