Theppitak's blog

My personal blog.

07 สิงหาคม 2555

Libdatrie Python Binding and Improvements

ในบรรดาโครงการต้นน้ำที่ผมทำ libdatrie น่าจะนับได้ว่าเป็นโครงการที่ได้รับความช่วยเหลือจากผู้ใช้มากที่สุดแล้ว ซึ่งเกือบทั้งหมดเป็นชาวต่างประเทศ (ดูหลักฐานได้ใน blog ก่อน ๆ) เช่นในครั้งนี้มาจากคุณ Mikhail Korobov จากรัสเซีย

Mikhail ได้ทำ Python binding สำหรับ libdatrie (และได้เล่าถึง Ruby binding ของ Tyler McMullen นักพัฒนาอีกคนหนึ่งด้วย) ทำให้พบประเด็นต่าง ๆ ที่ต้องการปรับปรุงที่ต้นน้ำ จึงได้ติดต่อมาที่ผม จากการพูดคุยแลกแพตช์กันทางอีเมล ก็ทำให้ libdatrie ใน SVN ได้รับการปรับปรุงหลายรายการ ที่ผ่านมาก็มีดังนี้:

  • แก้ปัญหาการคอมไพล์ด้วย MSVC ไม่ผ่าน
  • แก้ที่ผิดในเอกสารประกอบฟังก์ชัน
  • แก้บั๊กของบางฟังก์ชันที่พบระหว่างพูดคุยถึงอาการต่าง ๆ ที่เขาพบ
  • เพิ่ม API ใหม่สำหรับลิสต์รายการคำใน trie เพื่อใช้ใน Python binding เนื่องจาก API เดิมที่ใช้ callback function ไม่ยืดหยุ่นพอ จึงได้เพิ่มคลาส TrieIterator เพื่อให้โค้ดผู้เรียกสามารถควบคุม control flow เองได้มากขึ้น
  • optimize การลิสต์รายการคำ โดย Mikhail ได้เสนอให้คำนวณคีย์แบบ incremental และลดปริมาณการ malloc ซึ่งปรากฏว่าวิธีใหม่นี้ทำงานได้เร็วขึ้นกว่าเดิมประมาณ 10% และเมื่อปรับฟังก์ชันแบบที่เรียก callback แบบเดิมมาใช้ TrieIterator แทนการเรียกตัวเอง ยังทำให้ลดการใช้สแต็กลงไปได้อีกมาก
  • ปรับปรุงการคำนวณช่วงอักขระในคลาส AlphaMap ที่ใช้แปลงไปมาระหว่างอักขระภายนอกกับรหัส 8 บิตที่ใช้เดินไปใน trie ทำให้ได้ map ที่กระชับและประหยัดเวลาในการ map มากขึ้นในกรณีที่ผู้เรียกเพิ่มช่วงอักขระเล็ก ๆ หลายช่วง หรือแม้แต่เพิ่มอักขระทีละตัว

การปรับปรุงเหล่านี้ยังไม่มีผลใด ๆ ต่อการทำงานของ libthai และ swath แต่ก็ช่วยให้ผู้ใช้ที่นำ libdatrie ไปใช้ในกรณีต่าง ๆ ได้รับประโยชน์จากประสิทธิภาพและความยืดหยุ่นที่เพิ่มขึ้น

distro ทั่วไปที่มอง libdatrie ผ่าน application อย่าง libthai หรือ swath อาจจะเห็นเป็นแค่ไลบรารีเล็ก ๆ ที่ไม่มีความสำคัญ แต่สำหรับคนทำงานเรื่อง information retrieval หรือ NLP แล้ว libdatrie ได้พิสูจน์ตัวเองในระดับหนึ่งว่ามีประโยชน์พอสมควร จนกลายเป็นโครงการที่ให้ประสบการณ์แบบโอเพนซอร์สกับผมมากที่สุดในบรรดาโครงการทั้งหลายที่ทำมา

นอกจากแหล่งอย่าง Debian หรือ Ubuntu แล้ว คงต้องยกเครดิตให้กับ Wikipedia ที่ทำให้โครงการนี้เป็นที่รู้จัก

สำหรับฟีเจอร์ต่าง ๆ ที่ว่าไป รอพบได้ใน libdatrie รุ่นหน้าครับ ซึ่งยังไม่มีกำหนดออกรุ่นแน่นอน และหลังจากออกแล้ว ก็คงยังไม่ได้เข้า Debian Wheezy เนื่องจาก freeze ไปแล้ว ถ้าจะเข้า Debian ก็คงไปพักไว้ที่ experimental ก่อน

ป้ายกำกับ:

0 ความเห็น:

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem