ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programming[เมพ mysql] เรื่องการค้นหา ภาษาไทย แบบสะกดผิด
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [เมพ mysql] เรื่องการค้นหา ภาษาไทย แบบสะกดผิด  (อ่าน 1232 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
หนึ่งสุดหล่อ
สมุนแก๊งเสียว
*

พลังน้ำใจ: 64
ออฟไลน์ ออฟไลน์

กระทู้: 593



ดูรายละเอียด
« เมื่อ: 18 กรกฎาคม 2011, 17:10:57 »

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

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

ถ้าหาปกติจะไม่เจอ  Lips Sealed

ใครพอมีเทคนิคที่สามารถค้นหาแบบหลวมๆ หาพวกตัวสะกดผิดได้บ้างไหมครับ
บันทึกการเข้า
spmazon
Verified Seller
ก๊วนเสียว
*

พลังน้ำใจ: 42
ออฟไลน์ ออฟไลน์

กระทู้: 464



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 18 กรกฎาคม 2011, 17:54:30 »

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

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

ไล่ไปแบบนี้เรื่อยๆหนะครับ
บันทึกการเข้า

หนึ่งสุดหล่อ
สมุนแก๊งเสียว
*

พลังน้ำใจ: 64
ออฟไลน์ ออฟไลน์

กระทู้: 593



ดูรายละเอียด
« ตอบ #2 เมื่อ: 18 กรกฎาคม 2011, 18:28:54 »

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

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

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

+1

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

พลังน้ำใจ: 64
ออฟไลน์ ออฟไลน์

กระทู้: 593



ดูรายละเอียด
« ตอบ #3 เมื่อ: 18 กรกฎาคม 2011, 20:35:02 »

ดันๆ
 wanwan020
บันทึกการเข้า
tdelphi
Global Moderator
หัวหน้าแก๊งเสียว
*****

พลังน้ำใจ: 308
ออฟไลน์ ออฟไลน์

กระทู้: 1,601



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 18 กรกฎาคม 2011, 20:58:08 »

ศึกษา เรื่อง soundex น่าจะช่วยได้ครับ
บันทึกการเข้า

thenetxx
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 41
ออฟไลน์ ออฟไลน์

กระทู้: 1,986



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 19 กรกฎาคม 2011, 17:26:11 »

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

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

บันทึกการเข้า

Develop site but can't develop life
ASIA
dreamer
คนรักเสียว
*

พลังน้ำใจ: 16
ออฟไลน์ ออฟไลน์

กระทู้: 134



ดูรายละเอียด
« ตอบ #6 เมื่อ: 20 กรกฎาคม 2011, 21:26:57 »

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

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

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

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

พลังน้ำใจ: 31
ออฟไลน์ ออฟไลน์

กระทู้: 198



ดูรายละเอียด
« ตอบ #7 เมื่อ: 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 คำที่มีน้ำหนักมากที่สุดให้

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

บันทึกการเข้า
thenetxx
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 41
ออฟไลน์ ออฟไลน์

กระทู้: 1,986



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 20 กรกฎาคม 2011, 23:02:44 »

โอเคครับ

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


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

Develop site but can't develop life
ASIA
หน้า: [1]   ขึ้นบน
พิมพ์