ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => หัวข้อเริ่มโดย: หนึ่งสุดหล่อ ใน 18 กรกฎาคม 2011, 17:10:57

ชื่อเรื่อง: [เมพ mysql] เรื่องการค้นหา ภาษาไทย แบบสะกดผิด
โพสต์โดย: หนึ่งสุดหล่อ ใน 18 กรกฎาคม 2011, 17:10:57
ใช้ mysql 4.4 อยู่ครับ ดาต้าเบสใช้ UTF-8 แล้วต้องใช้การค้นหาชื่อสมาชิก

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

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

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

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

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

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

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

+1

ตอนนี้ผมก็ใช้แบบนี้อยู่ครับ แถมเอามา OR กันหมดเลย แถมใส่ score ด้วย CASE (ถ้าตรงตามเงื่อนไขเยอะก็จะ score จะสูง) ทีนี้มันก็จะช้าสุดๆๆ แถมได้ผลดีกับคำที่สะกดผิดตอนต้นหรือท้ายคำ ไม่ค่อยได้ผลดีต่อคำที่สะกดผิดตรงกลางคำเท่าไหร่ (เช่น พงษืศักดิ์)
:-X
ชื่อเรื่อง: Re: [เมพ mysql] เรื่องการค้นหา ภาษาไทย แบบสะกดผิด
โพสต์โดย: หนึ่งสุดหล่อ ใน 18 กรกฎาคม 2011, 20:35:02
ดันๆ
:wanwan020:
ชื่อเรื่อง: Re: [เมพ mysql] เรื่องการค้นหา ภาษาไทย แบบสะกดผิด
โพสต์โดย: tdelphi ใน 18 กรกฎาคม 2011, 20:58:08
ศึกษา เรื่อง soundex น่าจะช่วยได้ครับ
ชื่อเรื่อง: Re: [เมพ mysql] เรื่องการค้นหา ภาษาไทย แบบสะกดผิด
โพสต์โดย: thenetxx ใน 19 กรกฎาคม 2011, 17:26:11
set collation ของ db ให้ตรงกับ code

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

ชื่อเรื่อง: Re: [เมพ mysql] เรื่องการค้นหา ภาษาไทย แบบสะกดผิด
โพสต์โดย: dreamer ใน 20 กรกฎาคม 2011, 21:26:57
ผมลองคิดเล่นๆ นะครับ ไม่เคยทำจริงๆ

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

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

เวลาที่ user กรอกข้อมูลมา 1 คำ เราก็จะนำมาคำนวนหาความน่าจะเป็นว่า คำนี้สามารถเป็นอะไรได้บ้าง แล้วก็ค้นหาคำเหล่านั้นทั้งหมด
ชื่อเรื่อง: Re: [เมพ mysql] เรื่องการค้นหา ภาษาไทย แบบสะกดผิด
โพสต์โดย: Nomkhonwaan ใน 20 กรกฎาคม 2011, 22:04:51
 :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 คำที่มีน้ำหนักมากที่สุดให้

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

ชื่อเรื่อง: Re: [เมพ mysql] เรื่องการค้นหา ภาษาไทย แบบสะกดผิด
โพสต์โดย: thenetxx ใน 20 กรกฎาคม 2011, 23:02:44
โอเคครับ

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


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