[เมพ mysql] เรื่องการค้นหา ภาษาไทย แบบสะกดผิด

เริ่มโดย หนึ่งสุดหล่อ, 18 กรกฎาคม 2011, 17:10:57

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

หนึ่งสุดหล่อ

ใช้ mysql 4.4 อยู่ครับ ดาต้าเบสใช้ UTF-8 แล้วต้องใช้การค้นหาชื่อสมาชิก

ทีนี้บางครั้งสมาชิกใส่ชื่อตัวเองแบบสะกดผิดมา เช่น สมพงษ์ กลายเป็น สมพงษื

ถ้าหาปกติจะไม่เจอ  :-X

ใครพอมีเทคนิคที่สามารถค้นหาแบบหลวมๆ หาพวกตัวสะกดผิดได้บ้างไหมครับ

spmazon

ไม่รู้จะใช้ได้มั้ยเปล่านะครับ ถ้าเป็นผมคงต้องแยก query เป็นชุดๆ ตามตัวอักษรเอาหนะครับ เช่น หาคำว่า สมพงษื

แรกสุดหาคำว่า 'สม' ก่อนถ้าไม่เจอก็จบแต่ถ้าเจอ
หาคำว่า 'สมพ' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สม' ไปโชว์แทนแต่ถ้าเจอ
หาคำว่า 'สมพง' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สมพ' ไปโชว์แทนแต่ถ้าเจอ
หาคำว่า 'สมพงษ' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สมพง' ไปโชว์แทน

ไล่ไปแบบนี้เรื่อยๆหนะครับ

หนึ่งสุดหล่อ

อ้างถึงจาก: spmazon ใน 18 กรกฎาคม 2011, 17:54:30
ไม่รู้จะใช้ได้มั้ยเปล่านะครับ ถ้าเป็นผมคงต้องแยก query เป็นชุดๆ ตามตัวอักษรเอาหนะครับ เช่น หาคำว่า สมพงษื

แรกสุดหาคำว่า 'สม' ก่อนถ้าไม่เจอก็จบแต่ถ้าเจอ
หาคำว่า 'สมพ' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สม' ไปโชว์แทนแต่ถ้าเจอ
หาคำว่า 'สมพง' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สมพ' ไปโชว์แทนแต่ถ้าเจอ
หาคำว่า 'สมพงษ' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สมพง' ไปโชว์แทน

ไล่ไปแบบนี้เรื่อยๆหนะครับ

+1

ตอนนี้ผมก็ใช้แบบนี้อยู่ครับ แถมเอามา OR กันหมดเลย แถมใส่ score ด้วย CASE (ถ้าตรงตามเงื่อนไขเยอะก็จะ score จะสูง) ทีนี้มันก็จะช้าสุดๆๆ แถมได้ผลดีกับคำที่สะกดผิดตอนต้นหรือท้ายคำ ไม่ค่อยได้ผลดีต่อคำที่สะกดผิดตรงกลางคำเท่าไหร่ (เช่น พงษืศักดิ์)
:-X


tdelphi


thenetxx

set collation ของ db ให้ตรงกับ code

ไม่แน่ใจว่า charset ใช้อะไรครับ

Develop site but can't develop life
ASIA

dreamer

ผมลองคิดเล่นๆ นะครับ ไม่เคยทำจริงๆ

ปกติการพิมพ์ผิดจะเกิดจาก 2 กรณีคือ จิ้ม keyboard ผิด หรือ สะกดผิด

1. การกด keyboard ผิด ส่วนมากจะกดผิดมาเป็นตัวอักษรที่อยู่ใกล้ๆ
2. การสะกดผิดจะเกิดจากการพ้องเสียง เช่น สี /ศรี  กานต์/กาน/การ

เวลาที่ user กรอกข้อมูลมา 1 คำ เราก็จะนำมาคำนวนหาความน่าจะเป็นว่า คำนี้สามารถเป็นอะไรได้บ้าง แล้วก็ค้นหาคำเหล่านั้นทั้งหมด

Nomkhonwaan

 :wanwan020: ผมคิดว่าแบบนี้ก็น่าจะใช้ได้นะครับเพียงแต่ต้องมีการเก็บข้อมูลนานหน่อย

อย่างสมมติ

- ผู้ใช้งานต้องการจะค้นหาคำว่า `นักศึกษา` แต่พิมพ์ผิดเป็น `oydL7dKk` เพราะลืมสลับระหว่างภาษาไทยและอังกฤษ
search: oydL7dKk
result: 0
- เมื่อระบบค้นหาในครั้งแรก ยังไงก็ไม่เจอแน่นอน แต่ระบบก็จะเก็บไว้ว่ามีการค้นหาคำนี้น่ะ และให้โอกาสผู้ใช้งาน ค้นหาอีกครั้ง
try again search: นักศึกษา
result: != 0
- เมื่อผู้ใช้งานป้อนคำที่จะค้นหาใหม่ และเมื่อระบบค้นหาเจอ ก็ให้ทำการ เชื่อมโยงคำๆ นี้ว่าผู้ใช้งานต้องการผลลัพธ์อย่างนี้
failure word => oydL7dKk, success word => นักศึกษา
- และให้ระบบ เก็บค่าน้ำหนักของคำที่ค้นเจอ และหากว่ามีการค้นหาคำๆ นี้หลายๆ ครั้งเราก็เก็บค่าที่ถูกต้อง และให้น้ำหนักไปเรื่อยๆ
failure word => oydL7dKk, success word => นักศึกษา, weight => 1 point

สุดท้ายเมื่อผู้ใช้งาน ค้นหาคำแล้วไม่เจอผลลัพธ์ เราก็นำคำค้นหามาตรวจสอบกับรายการเดิมๆ และเลือก suggest คำที่มีน้ำหนักมากที่สุดให้

ประมาณนี้ครับ


thenetxx

โอเคครับ

เข้าใจคำถามแล้ว -*- ตอนแรกมึน ๆ ไม่เข้าใจ


งั้นทางออกที่ดี ผมว่าลองศึกษา AJAX Auto complete ครับ ถ้านึกภาพไม่ออกให้นึกถึงเวลา search facebook หรือ google พิม "สมศ" ก็ลิสมาให้เลือกเลยว่า จะเป็น สมศรี สมศักดิ๋ ... etc.
Develop site but can't develop life
ASIA