|
| 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | |
|
|
|
|
|
|
|
ตัดคำภาษาไทย ภาคแก้ไขให้เร็วจี๋และถูกต้องขึ้น
คำเตือน .. ระวังอ่านไม่รู้เรื่อง เพราะเป็นการพูดเกี่ยวกับการ Programming ล้วนๆ (แต่ถ้าอ่านแบบเรื่อยๆ ขำๆ เพลินๆ ก็ได้นะครับ ไม่เสียหลาย) การอธิบายก็จะเป็นแบบรวบรัด เนื่องจากรายละเอียดยิบย่อยต่างๆ ได้อธิบายไปในหัวข้อนี้ก่อนหน้านี้แล้ว คลิกเพื่อดูบทความการตัดคำที่เขียนไว้ก่อนหน้านี้
ก่อนหน้านี้เมื่อ 3-4 วัน ผมได้เขียน blog เกี่ยวกับการตัดคำภาษาไทยไป ในขณะนั้นเป็นการทำงานแบบ "ไฟลนก้น" เพราะตัวงานมันมี deadline อยู่ แต่พอผมทำเรียบร้อย พร้อมกับ demo ให้ผู้รับผิดชอบงานดูแล้ว ก็ผ่อนคลายลงไปมาก
ทีนี้เราก็มานั่งดูกันว่ามันมีปัญหาอะไรไหม .. ซึ่งปัญหามันก็ไปตรงกับข้อสรุปที่ผมได้บอกเอาไว้ก่อนแล้ว จัดที่สำคัญมันก็คือ มันไปตัดตรงกลางประโยค เพราะจะใส่ใจเฉพาะที่ท้ายบรรทัดเท่านั้น มีผลให้
1. คำที่ได้มีการเพี้ยนเป็นเปอร์เซนต์ไม่น่าเกลียด แต่ก็ไม่น่าพอใจสำหรับผมเท่าไหร่ (แต่เจ้าของงานพอใจนะ เพราะก่อนหน้านี้ไม่เคยมีตัดคำมาก่อน)
2. มีการมานึกว่า "ถ้ามันเกิน 2 บรรทัดล่ะ มันจะเป็นยังไง" อ้าว ซวยล่ะสิครับ เพราะผมคิดเอาไว้แค่ว่าข้อความมันจะมีแค่ 2 บรรทัด นั่นคือเขียนเฉพาะจุดที่ต้องตัด .. นี่ไง ผลของการไฟลนก้น ทำให้ผมต้องมานั่งคิดว่า ผมต้องตัดคำทั้งหมดแล้วล่ะ จะดีกว่า และดีที่สุดด้วย ไม่ต้องพะวง
3. ก็อย่างที่บอกว่าตอนนั้นผมรีบมาก เลยเขียนแบบไม่ค่อยรัดกุม ทำให้มีความล่าช้าในการคำนวน
หลังจากวันศุกร์ ผมก็นั่งคิดตลอดเวลาเกี่ยวกับเรื่องของงานตัวนี้ โดยมีใจความสำคัญว่า "ต้องตัดคำทั้งหมดให้ได้ก่อนวันจันทร์"
ผมเริ่มทำใหม่ ... สิ่งที่ผมเริ่มทำใหม่คือ ..
1. ทำ Index ของคำทั้งหมด (เกือบ 30,000 คำ) โดยใช้อักขระ 2 ตัวแรกเป็นตัว index เช่น ผมกำหนดว่า array("สแ", 21178, 21709) หมายถึงว่าคำที่ขึ้นต้นด้วย "สแ" จะมี 2 คำ โดยอยู่ในตำแหน่งที่ 21178 และ 21709 ซึ่งก็คือคำว่า "แสดง" เป็นต้น ซึ่งวิธีการนี้ จะช่วงลดระยะเวลาการ "คิด" ของโปรแกรมไปได้เยอะมากๆ เมื่อเทียบกับโปรแกรมเก่า ที่หาในช่วงไม่กี่คำ จะใช้เวลานานกว่าโปรแกรมใหม่นี้ทั้งประโยค หรือทั้งย่อหน้าเสียอีกครับ
2. ตอนแรกผมตั้งใจจะทำโดยใช้ลักษณะที่เรียกว่า Graph ในวิชา Data Structure ที่ได้เรียนมา แต่เนื่องจากว่า ผมหาหนังสือไม่เจอ (นึกออกว่าลืมไว้ที่ออฟฟิซ) และหาในเนตก็ไม่ได้ช่วยอะไรมากเลย แต่บังเอิญเหลือเกินมานั่งนึกออกว่า คำที่ผมต้องตัดเนี่ย จะไม่เป๊ะๆ ไปซะทั้งหมด และมีคำที่ไม่คาดฝันค่อนข้างบ่อย ซึ่งจะมีหรือจะมาตอนไหนก็ไม่รู้ เช่น
"คิดถึ่งเพ่กึ่งมั่กเยยยยย"
อย่างนี้เป็นต้น .. มันจะตัดยังไงล่ะ เพราะมีคำที่ไม่มีในพจนานุกรม แต่เป็นคำสมัยใหม่ ถ้าใช้ Graph เพราะว่าถ้าใช้ Graph เนี่ย ทุกอย่างมันต้องเป๊ะๆ แบบนี้โปรแกรมงงตายเลยครับ...
งงกันใช่ไหมครับ ผมพูดถึง graph ทำไม มันไม่ใช่ภาพแผนภูมิ แต่เป็น Algorithm แบบหนึ่งครับ นึกเกมถอดระเบิดใน windows ออกไหมครับ เวลาที่เราคลิกไปโดนที่ว่างๆ แล้วมันก็กระจายตัวออกพรึด .. นั่นล่ะครับ เค้าใช้ algorithm แบบ graph ในการคิด โดยไล่หาความสัมพันธ์ข้างเคียงของตัวมันกระจายไปเรื่อยๆ ครับ สำหรับกรณีนี้ ผมคิดให้มันตรวจสอบความสัมพันธ์ของคำตั้งแต่ต้นไปเรื่อยๆ ถ้ามีคำที่ไม่น่าจะเป็นคำได้ ก็ย้อนกลับมา ... ดังนั้น เราจะเจอคำที่ไม่เป็นคำแน่ๆ และบ่อยด้วย การใช้ graph จึงล้มเลิกไป
เอาล่ะ ไม่ใช้ graph .. ผมก็กลับมาใช้ array และตรวจสอบแบบวนเช็คเป็น loop เหมือนเดิม แต่คราวนี้ง่ายกว่าเดิมมากเลย เพราะว่าผมมี index ของคำเอาไว้แล้ว ทำให้การทำงานเร็วขึ้นมากซัก 70-80% เลยทีเดียว
และการตรวจสอบก็จะพลิกแพลงนิดหน่อย แต่จะคล้ายๆ เดิม คือตรวจสอบจากอักขระ 2 ตัวที่เป็น index ของคำที่เราตัดออกมาจากประโยค แล้วเทียบกับที่มีอยู่ในข้อมูลที่เก็บไว้ในคลังคำ ถ้าเจอก็เก็บไว้ก่อน ซึ่งการเจอ จะมีโอกาสเจอมากกว่า 1 คำ เช่น
index คำว่า "มา" เราสามารถเจอได้ทั้ง มา, มาก, มากกว่า ซึ่งเราต้องเลือกคำที่มีในประโยคและใน index และเลือกคำที่ยาวที่สุด ในที่นี้ก็คือคำว่า "มากกว่า" อย่างนี้เป็นต้นครับ
เป็นผลสำเร็จครับ เสร็จทันดูบอลคืนวันอาทิตย์พอดีเลย เย่!!!
นี่คือตัวอย่างของประโยคต้นแบบ และเมื่อมีการตัดคำแล้วครับ
แม้ดูจากภายนอกดาวประจำตัวยังมีความแข็งแกร่ง แต่ก็ล้อมรอบด้วยปัญหาต่างๆมากมาย
เมื่อผ่านโปรแกรมตัดคำแล้วจะได้เป็น
แม้ดูจากภายนอกดาวประจำตัวยังมีความแข็งแกร่ง แต่ก็ล้อมรอบด้วยปัญหาต่างๆมากมาย |
หรือประโยคนี้
เตือน ยาทานม ปนสารพิษ สธ.พบสุดอันตราย จะได้เป็น เตือน ยาทานม ปนสารพิษ สธ.พบสุดอันตราย |
จะเห็นว่ามีการตัดคำตั้งแต่ต้นประโยคจนจบประโยค และมีข้อผิดพลาดน้อยมากๆ .. เฮ้ออออ ค่อยยังชั่วครับ งานนี้ดีใจและภูมิใจมากๆ เลยล่ะครับ
หมายเหตุ : ขออนุญาติไม่แจก Source code นะครับ เพื่อป้องกันผลกระทบทางด้านธุรกิจครับ เดี๋ยวผมจะซวยเอา แหะๆๆๆ มีคนเค้าสะกิดผมมาาาาาาา
Create Date : 29 สิงหาคม 2548 |
|
30 comments |
Last Update : 29 สิงหาคม 2548 1:39:42 น. |
Counter : 4408 Pageviews. |
|
|
|
|
| |
โดย: chalam.exteen.com IP: 61.91.107.221 29 สิงหาคม 2548 1:42:02 น. |
|
|
|
| |
โดย: MooG.G 29 สิงหาคม 2548 2:23:33 น. |
|
|
|
| |
โดย: เกดจัง 29 สิงหาคม 2548 9:12:27 น. |
|
|
|
| |
โดย: Koppy 29 สิงหาคม 2548 17:03:14 น. |
|
|
|
| |
โดย: ปุ๋ย พันธุ์ทิพย์ (สวย ส่ายสุดๆ ) 29 สิงหาคม 2548 21:51:48 น. |
|
|
|
| |
โดย: ปุ๋ย พันธุ์ทิพย์ (สวย ส่ายสุดๆ ) 2 กันยายน 2548 11:30:22 น. |
|
|
|
| |
โดย: สาวน้อยตกน้ำ IP: 203.151.140.122 2 กันยายน 2548 23:24:18 น. |
|
|
|
| |
โดย: trdr IP: 125.24.14.86 19 พฤษภาคม 2549 11:42:13 น. |
|
|
|
| |
โดย: GiGaPop IP: 202.57.154.210 8 มิถุนายน 2549 11:29:28 น. |
|
|
|
| |
โดย: อนาคตมืดมน IP: 202.12.74.5 3 กรกฎาคม 2549 16:33:24 น. |
|
|
|
| |
โดย: AA IP: 202.12.73.19 21 สิงหาคม 2551 1:47:50 น. |
|
|
|
| |
โดย: ao IP: 125.24.55.32 23 ตุลาคม 2551 18:09:17 น. |
|
|
|
| |
โดย: ผู้นำแสงสว่าง่งชีวิต IP: 125.26.247.98 13 ธันวาคม 2551 12:11:53 น. |
|
|
|
| |
โดย: ผู้นำแสงสว่าง่งชีวิต IP: 125.26.247.98 13 ธันวาคม 2551 12:12:03 น. |
|
|
|
| |
โดย: ชุมพล IP: 58.136.98.190 31 มีนาคม 2552 20:59:05 น. |
|
|
|
| |
โดย: เส้นทางแห่งฝัน IP: 202.176.128.246 19 เมษายน 2552 0:59:14 น. |
|
|
|
| |
โดย: นิน IP: 124.121.89.209 10 มิถุนายน 2552 16:49:32 น. |
|
|
|
| |
โดย: เอก IP: 113.53.142.224 16 กุมภาพันธ์ 2554 17:20:13 น. |
|
|
|
| |
โดย: เอก IP: 113.53.142.224 16 กุมภาพันธ์ 2554 17:21:51 น. |
|
|
|
|
|
|
|
Location :
กรุงเทพ Thailand
[ดู Profile ทั้งหมด]
|
ฝากข้อความหลังไมค์
Rss Feed
ผู้ติดตามบล็อก : 4 คน [?]
|
มีคนถามมาเยอะ ว่าชื่อผมแปลว่าอะไร บอกง่ายๆ ว่ามาจากฟุตบอลครับ "กึ่งยิงกึ่งผ่าน" เป็นการส่งลูกไปที่
หน้าประตูฝ่ายตรงข้าม โดยผู้เล่นที่เลี้ยงลูกมาจากทางด้านข้างของสนาม พอถึงจังหวะ ก็ผ่านลูกมาให้เพื่อนที่วิ่งมารออยู่หน้าประตู .... ต่าแว่!!
... แต่ว่า!!! ... ลูกมันเลยเพื่อนไป แต่ก็ไม่ถึงประตู เหมือนจะเป็นการยิงประตูก็ไม่ใช่ จะส่งให้เพื่อนก็ไม่ใช่
นี่จึงเป็นที่มาของคำว่า "กึ่งยิงกึ่งผ่าน" ครับ
ผมไม่ได้คิดเองแต่อย่างใด แต่เอามาจากการดูฟุตบอลครับ
ปล. ชื่อผมนี่บ่งบอกเลยว่า "ฟุตบอล" แต่ผมไม่ได้เล่นห้องศุภฯ นะครับ .. แหะ แหะ แหะ
|
|
|
|
|
|
|