คำอธิบายโปรแกรม CTTEX รุ่น 1.21 (ตั้งแต่รุ่น 1.19 สำหรับรุ่นก่อนหน้านี้ กรุณาเปิดไฟล์ README) มีอะไรใหม่ในรุ่น 1.21 - เพิ่มตัวเลือก -i และ -m - ที่มาของตัวเลือก -i ลองพิจารณาประโยค "สามารถนั่งตากลม" หากทำการตัดโดยอาศัยคำที่มีในรายการคำ ด้วยวิธีการตัดที่เป็นไปได้ทั้งหมดแล้ว จะพบว่าคำว่า "สามารถ" สามารถตัดได้ สองวิธี คือ สามารถ และ สา-มา-รถ และคำว่า ตากลม ก็ถูกตัดได้สองวิธี คือ ตาก-ลม และ ตา-กลม ประโยคนี้จึงสามารถตัดได้ทั้งหมด 2x2=4 วิธี ดังแสดง ในผลของ cttex -a ดังนี้ # cttex -a 32 0[4]: สามารถ นั่ง ตาก ลม 1[4]: สามารถ นั่ง ตา กลม 2[6]: สา มา รถ นั่ง ตาก ลม 3[6]: สา มา รถ นั่ง ตา กลม สามารถ นั่ง ตา กลม แต่ในความเป็นจริงแล้ว การทำดรรชนีสำหรับค้นหาจะสะดวกขึ้นมากถ้าหาก โปรแกรมแสดงผล เฉพาะคำที่มีวิธีการตัดที่แตกต่างออกไปเท่านั้น คือ แสดงผลเฉพาะ - วิธีตัดหลัก -> สามารถ นั่ง ตา กลม - กับคำที่มีวิธีการตัดที่ต่างออกไป -> ตาก ลม, สา มา รถ cttex รุ่น 1.21 สามารถทำได้โดยใช้ตัวเลือก -i ดังนี้ # cttex -i 32 ตาก:ลม:สา:มา:รถ:สามารถ นั่ง ตา กลม เพื่อให้จำนวนบรรทัดของ Input เท่ากับจำนวนบรรทัดของ Output ผลการตัด จะแสดงอยู่ในบรรทัดเดียวกัน โดยคำที่มีวิธีการตัดที่ต่างออกไปจะปรากฏขึ้นก่อน และคั่นด้วยเครื่องหมาย : และประโยคข้อความเดิมที่ถูกตัดจะปรากฏ ในตำแหน่งท้ายสุด - ที่มาของตัวเลือก -m หากพิจารณาให้ดี จะเห็นว่าในตัวอย่างข้างต้นนี้ โปรแกรมไม่ควรจะกระจาย สามารถ ออกมาเป็น สา มา รถ เพราะเป็นการเพิ่มจำนวนคำ และผู้ที่ค้นหา คำว่า "มา" คงไม่ต้องการให้คำว่า "สามารถ" ปรากฏอยู่ผลลัพธ์ด้วย การใช้ตัวเลือก -m ควบคู่กับ -a หรือ -i จะเป็นการบังคับให้ cttex แสดงวิธีการตัดที่เป็นไปได้ทั้งหมด เฉพาะในกรณีที่ได้จำนวนคำ ที่น้อยที่สุดด้วยเท่านั้น เช่น # cttex -a -m 32 0[4]: สามารถ นั่ง ตาก ลม 1[4]: สามารถ นั่ง ตา กลม สามารถ นั่ง ตา กลม (ตัดเฉพาะ ตา กลม กับ ตาก ลม ไม่กระจายคำว่า สามารถ) # cttex -i -m 32 ตาก:ลม:สามารถ นั่ง ตา กลม # cttex -a -i -m 32 0[4]: สามารถ นั่ง ตาก ลม 1[4]: สามารถ นั่ง ตา กลม ตาก:ลม:สามารถ นั่ง ตา กลม มีอะไรใหม่ในรุ่น 1.20 - ใช้วิธีการค้นหาคำใหม่ (findword) โดยอาศัยวิธี DFA(Trie) แทนการค้น หาแบบ Binary Search ในรุ่นก่อนๆ โปรแกรมไม่จำเป็นต้องใช้ รายการคำ (tdict.h) แต่จะใช้ตารางการเปลี่ยนสถานะ (map.c) แทน เพิ่มโปรแกรม dict2state.c สำหรับสร้างตารางนี้จาก รายการคำ การค้นหาคำจะทำได้เร็วขึ้นกว่าเดิมมาก เมื่อรวมกับการตัดคำแบบ recursive ที่เพิ่มเข้ามาในรุ่น 1.19 ทำให้โปรแกรมโดยรวมทำ งานที่ความเร็วใกล้เคียงกับ cttex รุ่นแรกๆ - ตัวเลือก -r สามารถแสดงคำที่ไม่พบในรายการคำออกมาทาง stderr ในรูปแบบที่เข้าใจได้ง่ายขึ้น - เพิ่มตัวเลือก -a เพื่อแสดงวิธีการตัดคำที่เป็นไปได้ทั้งหมด ปกติ cttex จะเลือกการตัดคำที่ให้จำนวนคำน้อยที่สุดจากวิธีการที่เป็นไปได้ทั้งหมด สามารถนำไปประยุกต์ใช้เพื่อสร้างดรรชนีสำหรับระบบค้นหาข้อมูลภาษาไทยได้ มีอะไรใหม่ในรุ่น 1.19 - ใช้วิธีการใหม่ในการหาคำ (dooneline2) วิธีการเดิม จะหยุดตัดคำเมื่อพบวิธีการเอาคำในรายการคำที่มี มาเรียงกันเป็นวลีที่ป้อนเข้ามา โปรแกรมจะแสดงผลลัพท์อันแรกอันเดียว วิธีการใหม่ จะพยายามตัดคำทุกวิถีทางที่จะทำได้ โดยเลือกวิธีการที่ มีจำนวนตัวอักษรที่ไม่พบในรายการคำน้อยที่สุด และตัดออกมาได้จำนวนคำน้อยที่สุด การตัดคำจะช้าลงกว่าเดิมมาก เนื่องจากโปรแกรมจำเป็นต้อง recursive หาวิธีการตัดที่เป็นไปได้ทั้งหมด - สามารถทำงานในโหมด Debug เพื่อแสดงวิธีการตัดคำ(เกือบ)ทั้งหมดที่พบระหว่าง การค้นหา เช่น ->ตากลม = ตาก ลม Err(0) Word(2) = ตา กลม Err(0) Word(2) หรือในกรณีที่มีตัวสะกดผิด ->กการ =กก *าร Err(2) Word(1) =#ก การ Err(1) Word(1) - แก้ไขลำดับพยัญชนะและสระให้ถูกต้องก่อนทำการตัดคำ - ใช้งานได้สะดวกขึ้นผ่าน command-line option - เปลี่ยนมาใช้รายการคำของราชบัณฑิต (ได้มาจาก NECTEC) ไฟล์ที่ใช้คือ nectec/riheads.txt