Thursday, July 08, 2004

เขียนใหม่ให้สั้นลง (การตัดคำของ cttex)

นั่งคิดดูใหม่ ไอ้ที่เขียนไปยาวๆเมื่อกี้ น่าจะเขียนใหม่สั้นๆได้แบบนี้

สมมติว่าสายวลีที่จะตัดคำ มีความยาว 8 บล็อค (ตัวอักษร ซึ่งรวมสระบนล่าง) คือ

a b c d e f g h

ในกรณีนี้ จุดตัดที่เป็นไปได้ทั้งหมดมี 7 จุด คือ ระหว่าง a-b, b-c, ..., g-h ดังนั้นจึงมีวิธีตัดคำทั้งหมด 2^7 = 128 วิธี

ตัดมันให้หมดทุกวิธี แล้วสำหรับแต่ละวิธี ก็มานั่งนับ

  1. จำนวนคำ ที่ตรงกับคำในรายการคำ
  2. จำนวนบล็อคของขยะ (ไม่ตรงกับคำในรายการคำ)
เช่น ถ้าตัด "a b c | d e f g | h"

แล้วพบว่า "a b c", "h" มีอยู่ในรายการคำ (2 คำ)
แต่ "d e f g" ไม่อยู่ (4 บล็อค)

ก็ถือว่าตัดได้ 2 คำ พร้อมขยะ 4 บล็อค

ทำให้หมด 128 แบบ แล้วเลือกวิธีตัดที่ได้ จำนวนคำ และ จำนวนบล็อคขยะ ที่น้อยที่สุด โดยจำนวนบล็อคขยะควรเป็นศูนย์ (ถึงจะทำให้จำนวนคำมากหน่อยก็ยอม)

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

แต่ก็ยังไม่เคยตรวจสอบว่า cttex ตอนนี้ทำงานได้ตรงกับที่ตั้งใจไว้แบบนี้หรือเปล่า

แก้ไข (2004/12/05)

มาแก้หัวข้อ เดิม "เขียนใหม่ให้สั้นลง" เฉยๆ ดูทีหลังแล้วงงว่าเรื่องอะไร โดยเพิ่มวงเล็บ "(การตัดคำของ cttex)"

1 comment:

fat dog father said...

เมื่อก่อน (10 ปีกว่าปีแล้ว) เคยเขียนโปรแกรมตัดคำให้กับ Dictionaration
ของไทยรุ่นหนึ่งเหมือนกัน ไม่ได้เช็คคำขยะนี่เอง คนเอาไปใส่เครื่องถึง
ได้บ่นตรึม ว่าไงมันผิดเยอะเหลือเกิน