บทความ ของขวัญปีใหม่ "ตัดคำภาษาไทย" แล้วก็วิธีการ Search แบบ Fulltext
Jan 2, 2011 11:29:57 PM
| 32 Comments
| in Programing
| Search, Swath
บทความนี้ผมถือว่าเป็นของขวัญปีใหม่สำหรับ Developer ทุกคนที่ติดตาม jQueryTips.com นะครับ เพราะว่า คุณจะหาอ่านบทความเรื่องนี้แบบครบถ้วนที่ไหนไม่ได้อีกแล้ว เพราะว่า English Text ก้ไม่มี เพราะมันเป็นเรื่อง Algorithm ของการตัดคำภาษาไทย 555+
บทความนี้จะขอแบ่งออกเป็น 2 ตอนนะครับ โดยเนื้อหาในส่วนแรกจะเป็นเรื่องของ "การตัดคำภาษาไทย" ส่วนเรื่องที่ 2 จะเป็นการประยุกต์ใช้งาน กับคำที่เราได้ออกมากับ "Zend_Search_Lucene"
เอาล่ะเรามาเริ่มเนื้อหาในส่วนของตอนแรกกันดีกว่า...
เรื่องการตัดคำนั้นมันเป็นเรื่องหน้าหนักใจจริงๆ ครับในส่วนของภาษาไทย เพราะว่า Software ที่ทำมาส่วนมากมันจะรองรับ กับ International language ก่อน นั่นก็คือ ภาษาอังกฤษ ต่อมาก็พวก Spainish แล้วก็ไล่มาเรื่อยๆ จนท้ายๆ น่ะมันถึงจะหันมามองเรา ซึ่งการตัดคำในภาษาอื่นมันก็แสนจะง่ายดายไม่มีอะไรซับซ้อน เพราะว่ามันสามารถตัดกันได้ที่ช่องไฟอยู่แล้ว
แต่ภาษาแม่เรามันดันไม่มีช่องไฟ เพื่อที่จะให้มันทำการตัดคำ "เรื่องใหญ่เลยนะ" เพราะว่า ถ้าเราแยกคำไม่ออก เราก็ไม่สามารถเอาไปทำพวก ระบบค้นหาแบบ Fulltext ได้เลย นอกจากหนีไปใช้ Algorithm แบบ N-gram ที่ใช้วิธีการตัด ทุกๆตัวอักษร ทำให้ผลลัพธ์ที่ได้ ขาดความแม่นยำ และเสียพื้นที่การจัดเก็บสูง ซึ่งตัวตัดคำนี้ก้มีหลายตัวด้วยกัน แต่ที่ผมจะเอามาทดลอง วันนี้ชื่อว่า "swath" ครับ ซึ่งผู้พัฒนาก็คือ NECTEC นั่นเองครับ
บทความนี้จะขอแบ่งออกเป็น 2 ตอนนะครับ โดยเนื้อหาในส่วนแรกจะเป็นเรื่องของ "การตัดคำภาษาไทย" ส่วนเรื่องที่ 2 จะเป็นการประยุกต์ใช้งาน กับคำที่เราได้ออกมากับ "Zend_Search_Lucene"
เอาล่ะเรามาเริ่มเนื้อหาในส่วนของตอนแรกกันดีกว่า...
เรื่องการตัดคำนั้นมันเป็นเรื่องหน้าหนักใจจริงๆ ครับในส่วนของภาษาไทย เพราะว่า Software ที่ทำมาส่วนมากมันจะรองรับ กับ International language ก่อน นั่นก็คือ ภาษาอังกฤษ ต่อมาก็พวก Spainish แล้วก็ไล่มาเรื่อยๆ จนท้ายๆ น่ะมันถึงจะหันมามองเรา ซึ่งการตัดคำในภาษาอื่นมันก็แสนจะง่ายดายไม่มีอะไรซับซ้อน เพราะว่ามันสามารถตัดกันได้ที่ช่องไฟอยู่แล้ว
แต่ภาษาแม่เรามันดันไม่มีช่องไฟ เพื่อที่จะให้มันทำการตัดคำ "เรื่องใหญ่เลยนะ" เพราะว่า ถ้าเราแยกคำไม่ออก เราก็ไม่สามารถเอาไปทำพวก ระบบค้นหาแบบ Fulltext ได้เลย นอกจากหนีไปใช้ Algorithm แบบ N-gram ที่ใช้วิธีการตัด ทุกๆตัวอักษร ทำให้ผลลัพธ์ที่ได้ ขาดความแม่นยำ และเสียพื้นที่การจัดเก็บสูง ซึ่งตัวตัดคำนี้ก้มีหลายตัวด้วยกัน แต่ที่ผมจะเอามาทดลอง วันนี้ชื่อว่า "swath" ครับ ซึ่งผู้พัฒนาก็คือ NECTEC นั่นเองครับ
