แนวคิดการค้นหาฐานข้อมูลคลุมเครือ


13

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

ตารางเราต้องการค้นหา:

**tblArticles**
Body - Soundex_Body - CharacterCoded_Body

ดังนั้นเราจึงจัดเก็บเนื้อหาข้อความดิบสำหรับการแสดงผลทางกายภาพ อีก 2 คอลัมน์ใช้สำหรับการค้นหาซึ่งคำนวณล่วงหน้าด้วยวิธีต่อไปนี้:

Soundex

ร่างกายแบ่งออกเป็นคำพูดและแปลเป็นเวอร์ชั่นซาวด์ IE เนื้อหาที่ได้อาจเป็นดังนี้:

H252 B54 C23 E33... etc

ดังนั้นบางคนอาจเข้าสู่ 'dinosore' และเนื้อหาของบทความอ่านว่า 'ไดโนเสาร์' สิ่งเหล่านี้ทั้งคู่ประเมินเป็น 26 บาท จากนั้นเราจะเรียกใช้ LIKE บนค่า soundex ของข้อความค้นหา

รหัสตัวละคร

รับการทำแผนที่ตัวละครที่แมปตัวอักษรกับตัวเลขสำคัญ IE:

h = 2
e = 3
l = 5
o = 7
p = 11
c = 13

help = 2*3*5*11     =   330
hello = 2*3*5*5*7   =   1050
hell = 2*3*5*5      =   150
hlep = 2*5*3*11     =   330
cello = 13*3*5*5*7  =   6825

หากผู้ใช้หมายถึงพิมพ์ 'hello' แต่พวกเขาสลับอักขระอย่างน้อยสองตัวเช่น 'hlelo' พวกเขาจะประเมินเป็นหมายเลขเดียวกัน แยกเนื้อหาดิบเป็นคำให้เข้ารหัสทุกคำและเก็บไว้ในฐานข้อมูลโดยให้ฟิลด์ที่มีลักษณะดังนี้:

330 6825 330 1050... etc

จากนั้นเราสามารถค้นหาค่านี้เพื่อจับคู่กับ mistypes

ประโยชน์ที่ได้รับ

  • Typos ป้องกัน
  • ป้องกันการสะกดที่ไม่ถูกต้องตามการออกเสียง
  • ไม่ใช่เจ้าของภาษาพูดภาษาอังกฤษได้ดี
  • จะทำงานในภาษาใดก็ได้ (ที่ soundex ทำงาน)

ความคิดเห็นและความคิด? การค้นหาแบบหลายชั้น แน่นอนว่าคุณสามารถคืนค่าน้ำหนักเพื่อทำให้ดียิ่งขึ้น (IE เป็นตัวอักษรที่ตรงกับตัวอักษรมีค่ามากกว่า) แต่นี่เป็นวิธีแก้ปัญหาการสะกดคำที่ผิด


น่าสนใจที่จะเห็นว่าสิ่งนี้เปรียบเทียบกับ Trigram Search ได้อย่างไร
Rich

ฉันชอบที่จะมีอะไรเช่นนี้สำหรับเวิร์ดเพรส ...
Kit Menke

การใช้เฉพาะช่วงเวลาสำหรับฟังก์ชั่นการแปลงแป้นพิมพ์ของคุณทำให้เป็นไปไม่ได้ที่จะมีการชนกันของคำที่ไม่มีวิธีการที่เหมือนกันหรือไม่? ดูเหมือนว่าควรเป็นไปได้ที่จะมีคำยาวที่มีตัวอักษรราคาต่ำจำนวนมากที่แฮชให้เป็นค่าเดียวกันกับคำสั้น ๆ ที่มีตัวอักษรที่มีมูลค่าสูงไม่กี่ตัว แต่ฉันไม่รู้ทฤษฎีจำนวนมาก ก็อาจได้รับการพิสูจน์กันหรืออีกวิธีหนึ่ง ...
glenatron

1
@Glen Afaik คูณคูณด้วยกันเสมอสร้างหมายเลขที่ไม่ซ้ำกัน แอนนาแกรมจะชนกัน แต่ idk มีปัญหามากแค่ไหนนั่นคือประเด็นหลักในการค้นหาแอนนาแกรมอย่างรวดเร็ว
Tom

@Glen: ดูทฤษฎีบทการแยกตัวประกอบเฉพาะเพื่อความเป็นเอกลักษณ์
Steven Evers

คำตอบ:


2

มีอัลกอริธึมการค้นหาอื่น ๆ อีกจำนวนมาก Smith-Watermanเป็นหนึ่งในคนที่ดีกว่าสำหรับข้อความของมนุษย์ในขณะที่BLASTนั้นดีที่สุดสำหรับการค้นหาลำดับดีเอ็นเอ เมื่อคุณจะแสดงข้อความที่มีการสะกดผิดต่างๆเช่นhlepแทนที่จะhelpแล้วคุณกำลังมองหาระยะทางขั้นต่ำแก้ไข

สำหรับห้องสมุดในการดำเนินการจำนวนของฟังก์ชั่นเหล่านี้ใน CLR ใน SQL Server 2005 (และต่อมา) ดูที่โครงการมาปลอมSimMetrics บล็อกโพสต์เกี่ยวกับSimMetrics
http://staffwww.dcs.shef.ac.uk/people/S.Chapman/simmetrics.html

Soundex ได้รับการพัฒนาขึ้นเนื่องจากความแตกต่างหลักระหว่างเสียงพูดของภูมิภาคแตกต่างกันมากในเสียงสระ - ซึ่งเป็นเหตุผลว่าทำไมเสียงจึงแตกออก การรับมือกับจดหมายที่ส่งกลับไม่ดี


2

Apache Solr สนับสนุนคำพ้องความหมายและการแก้ไขการสะกดคำ - แม้ว่าจะยังค่อนข้างหยาบรอบ ๆ ขอบ

การค้นหาแบบคลุมเครือสามารถใช้งานได้โดยใช้ Ngrams,

พอร์เตอร์ Stemmer: http://tartarus.org/~martin/PorterStemmer/

และฐานข้อมูลภาษาเช่นhttp://wordnet.princeton.edu/

... แต่โครงการเช่น Xapian และ Solr จัดการเรื่องนี้ให้คุณได้มาก

หากคุณต้องการสร้างคำค้นหาแยกวิเคราะห์ / เครื่องมือค้นหาของคุณเองฉันขอแนะนำให้ใส่โทเค็นหรือคำที่คุณสร้างลงในฐานข้อมูลที่มีอยู่ที่ออกแบบมาเพื่อทำการค้นหาภาษา


1

ฉันทำบางสิ่งเช่นนั้นสักครู่เพื่อหาที่อยู่ซึ่งจะตรวจสอบว่าต้องใช้การเปลี่ยนแปลงกี่ครั้งในการแปลงสตริงหนึ่งเป็นสตริงอื่นและส่งคืนค่าตัวเลขระหว่าง 0 ถึง 1 เพื่อจับคู่ที่ใกล้เคียงกันมากขึ้น

มันทำงานได้อย่างยอดเยี่ยมเพราะมันจะคืนค่าที่สูงสำหรับรายการต่าง ๆ เช่น N / North, St / Street, EastMain / MainEast เป็นต้นความคิดมาจากลิงค์ CodeProject นี้


รหัสที่คุณเขียนสำหรับที่อยู่ตรงกับโอเพ่นซอร์สตรงกันหรือเปล่า
Thismatters

@Thismatters ฉันไม่สามารถเข้าถึงรหัส แต่ลิงค์ในคำตอบของฉันควรให้เหตุผลสำหรับมัน โดยทั่วไปคุณแค่ต้องการดูว่ามีการเปลี่ยนแปลงมากมายที่จะทำให้สตริงหนึ่งเป็นอีกสตริงหนึ่งและการเปลี่ยนแปลงที่น้อยลงก็ยิ่งใกล้มากขึ้น
ราเชล

0

หากคุณเป็นชื่อที่ตรงกันหรือบุคคลหรือสถานที่รายการคำพ้องสามารถทำงานได้ดีขึ้นมาก

Soundex จะไม่ตรงกับ "Dick == Richard" "Kit == Christopher" หรือ "Ms. == Mrs"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.