डेटाबेस फजी खोज अवधारणा


13

मैंने इस बारे में सोचा, और समाधान के साथ आने की कोशिश कर रहा हूं कि कैसे एक डेटाबेस को खोजने के लिए फजी हो, अगर उदाहरण के लिए एक उपयोगकर्ता एक वर्तनी की गलती टाइप करता है। इसके पीछे के तर्क के साथ कोई चमकती हुई समस्या? क्या यह काम करेगा और पहले भी किया गया है?

हमारी तालिका हम खोज करना चाहते हैं:

**tblArticles**
Body - Soundex_Body - CharacterCoded_Body

इसलिए हम भौतिक प्रदर्शन के लिए कच्चे टेक्स्ट बॉडी को स्टोर करते हैं। अन्य 2 कॉलम का उपयोग उन खोजों के लिए किया जाता है जो निम्नलिखित तरीके से पूर्व निर्धारित हैं:

Soundex

बॉडी को शब्दों में विभाजित किया गया है, और इसका साउंडेक्स संस्करण में अनुवाद किया गया है। IE, जिसके परिणामस्वरूप शरीर कुछ इस तरह हो सकता है:

H252 B54 C23 E33... etc

तो कोई 'डायनसोर' में प्रवेश कर सकता है, और लेख निकाय 'डायनासोर' को पढ़ता है, ये दोनों B26 का मूल्यांकन करते हैं। फिर हम खोज शब्द के ध्वनि मान पर एक LIKE चलाते हैं।

चरित्र कोडेड

एक ऐसे चरित्र मानचित्रण को देखते हुए, जो मानचित्र अभाज्य संख्याओं में आता है, 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

यदि कोई उपयोगकर्ता 'हैलो' टाइप करना चाहता है, लेकिन उन्होंने दो या दो से अधिक वर्णों को 'हेलो' उदाहरण के लिए चारों ओर घुमाया, तो वे उसी संख्या का मूल्यांकन करेंगे। कच्चे शरीर को शब्दों में विभाजित करें, प्राइम हर शब्द को एनकोड करें और डेटाबेस में स्टोर करें जो आपको ऐसा दिखता है:

330 6825 330 1050... etc

फिर हम मिस्टीज से मिलान करने के लिए इस मान पर खोज पसंद कर सकते हैं।

लाभ

  • टाइपोस के खिलाफ की रक्षा की
  • ध्वन्यात्मक गलत वर्तनी के खिलाफ संरक्षित है
  • अधिक गैर देशी अंग्रेजी बोल अनुकूल
  • किसी भी भाषा में काम करेगा (जहां साउंडेक्स काम करता है)

टिप्पणियाँ और विचार? एक प्रकार की बहुस्तरीय खोज। आप निश्चित रूप से इसे और भी बेहतर बनाने के लिए वेट रिटर्न वैल्यू कर सकते हैं (IE एक शाब्दिक टेक्स्ट बॉडी मैच अधिक मूल्य का है), लेकिन क्या यह वर्तनी की त्रुटियों और गैर-देशी अंग्रेजी बोलने वालों की खोजों के लिए एक अच्छा समाधान है?


यह देखना दिलचस्प होगा कि यह ट्रिग्राम सर्च के साथ तुलना कैसे करता है।
रिच

मैं वर्डप्रेस के लिए कुछ इस तरह से प्यार करता हूँ ...
किट मेन्के

क्या आपके हैशिंग फ़ंक्शन के लिए प्राइम का उपयोग करना किसी भी शब्द टकराव को असंभव बनाता है जिसमें समान तरीके शामिल नहीं हैं? ऐसा लगता है कि बहुत से कम-मूल्य वाले अक्षरों के साथ एक लंबा शब्द होना संभव है, जो कुछ उच्च-मूल्य वाले अक्षरों के साथ एक छोटे शब्द के समान मूल्य के लिए हैशेड करता है, लेकिन मुझे बहुत संख्या सिद्धांत नहीं पता है यह शायद एक तरह से या किसी अन्य तरह से साबित हो ...
ग्लेनट्रॉन

1
@ गेल अफीक गुणा प्राइमिंग एक साथ हमेशा एक अद्वितीय संख्या उत्पन्न करता है। हालांकि, एनाग्रम टकराएंगे, लेकिन इसमें कितनी समस्या है, आइडल है, यह मूल रूप से यह है कि एनाग्रम को जल्दी से ढूंढना है।
टॉम

@ गेलन: अद्वितीयता के लिए अद्वितीय गुणन प्रमेय देखें।
स्टीवन एवर्स

जवाबों:


2

कई अन्य खोज एल्गोरिदम हैं। स्मिथ-वाटरमैन मानव पाठ के लिए बेहतर में से एक है, जबकि डीएनए अनुक्रम की खोज के लिए BLAST (अब तक) सबसे अच्छा है। जब आपको hlepइसके बजाय विभिन्न वर्तनी त्रुटियों के साथ पाठ प्रस्तुत किया जाता है help, तो आप न्यूनतम संपादन दूरी की तलाश कर रहे हैं ।

SQL सर्वर 2005 (और बाद में) में CLR में इन कार्यों के एक नंबर को लागू करने के लिए एक पुस्तकालय के लिए, स्रोत फोर्ज परियोजना SimMotrics को देखेंSimMetrics के बारे में ब्लॉग पोस्टhttp://staffwww.dcs.shef.ac.uk/people/S.Chapman/simmetrics.html

साउंडेक्स विकसित किया गया था क्योंकि क्षेत्रीय भाषण विविधताओं के बीच प्राथमिक अंतर लगभग विशेष रूप से स्वरों में था - यही कारण है कि यह स्वर बाहर निकालता है। यह ट्रांसपोंड अक्षरों के साथ मुकाबला करने में अच्छा नहीं है।


2

अपाचे सोलर, समानार्थी और वर्तनी सुधार का समर्थन करता है - हालांकि यह किनारों के आसपास थोड़ा मोटा है।

फजी खोजों को Ngrams के उपयोग से कार्यान्वित किया जा सकता है,

पोर्टर स्टेमर: http://tartarus.org/~martin/PorterStemmer/

और एक भाषा डेटाबेस जैसे कि http://wordnet.princeton.edu/

... लेकिन एक्सपियन और सोलर जैसी परियोजनाएं आपके लिए इसे बहुत संभालती हैं।

यदि आप अपना स्वयं का शब्द खोज शब्द पार्सिंग / खोज इंजन बनाना चाहते हैं, तो मैं सुझाव दूंगा कि आप एक मौजूदा डेटाबेस में उत्पन्न होने वाले टोकन या शब्द डालें जो भाषा खोज करने के लिए डिज़ाइन किया गया हो।


1

मैंने कुछ ऐसा किया था कि कुछ समय पहले पते के लिए जो यह जांच करेगा कि एक स्ट्रिंग को दूसरे स्ट्रिंग में बदलने के लिए कितने परिवर्तन होंगे, और 0 और 1 के बीच एक संख्यात्मक मान लौटाएगा कि दोनों कितने निकट से मेल खाते हैं।

इसने महान काम किया क्योंकि यह N / North, St / Street, EastMain / MainEast आदि जैसी वस्तुओं के लिए उच्च मूल्य लौटाएगा। यह विचार इस CodeProject लिंक से आया है


क्या आपने जो कोड ओपन सोर्स से मेल खाने के लिए लिखा है?
Thismatters

@ थिस्माटर्स मेरे पास कोड तक पहुंच नहीं है, लेकिन मेरे उत्तर में लिंक इसके लिए तर्क प्रदान करना चाहिए। मूल रूप से आप सिर्फ यह देखना चाहते हैं कि एक स्ट्रिंग को दूसरे में बदलने के लिए कितने बदलाव होंगे, और कम बदलाव फिर उनके करीब होंगे
राहेल

0

यदि आप नाम, या लोग या स्थान मिलान कर रहे हैं, तो एक पर्याय सूची बहुत बेहतर काम कर सकती है।

साउंडेक्स "डिक == रिचर्ड" "किट == क्रिस्टोफर" या "सुश्री। == श्रीमती" से मेल नहीं खाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.