मैं एक सरणी को फ़िल्टर करने के लिए एक फजी सर्च जावास्क्रिप्ट लाइब्रेरी की तलाश में हूं। मैंने fuzzyset.js और fuse.js का उपयोग करने की कोशिश की है , लेकिन परिणाम बहुत ही भयानक हैं (ऐसे डेमो हैं जिन्हें आप लिंक किए गए पृष्ठों पर आज़मा सकते हैं)।
लेवेंसहेटिन दूरी पर कुछ पढ़ने के बाद, यह मुझे एक खराब अनुमान के रूप में प्रभावित करता है कि उपयोगकर्ता जब टाइप करते हैं, तो वे क्या देख रहे हैं। जो नहीं जानते हैं, उनके लिए सिस्टम यह गणना करता है कि दो स्ट्रिंग्स मैच करने के लिए कितने सम्मिलन , विलोपन और प्रतिस्थापन की आवश्यकता है।
एक स्पष्ट दोष है, जो Levenshtein-Demerau मॉडल में तय हो गई है, कि दोनों है blub और स्तन समान रूप से करने के लिए इसी तरह के विचार कर रहे हैं बल्ब (प्रत्येक दो प्रतिस्थापन की आवश्यकता होती है)। यह स्पष्ट है, हालांकि, यह बल्ब उल्लू की तुलना में ब्लब के समान है, और जिस मॉडल का मैंने अभी उल्लेख किया है, वह मानता है कि ट्रांसपोज़िशन के लिए अनुमति देकर ।
मैं इसे पाठ पूरा होने के संदर्भ में उपयोग करना चाहता हूं, इसलिए यदि मेरे पास एक सरणी है ['international', 'splint', 'tinder']
, और मेरी क्वेरी int है , तो मुझे लगता है कि अंतरराष्ट्रीय को स्प्लिंट से अधिक रैंक करना चाहिए , भले ही पूर्व में 10 का स्कोर (उच्च = खराब) हो। बनाम बाद के 3।
तो मैं जो खोज रहा हूं (और अगर वह मौजूद नहीं है तो बनाएगा), एक पुस्तकालय है जो निम्नलिखित कार्य करता है:
- विभिन्न पाठ जोड़तोड़ वजन
- प्रत्येक हेरफेर को अलग-अलग तरीके से निर्भर करता है जहां वे एक शब्द में दिखाई देते हैं (शुरुआती जोड़तोड़ देर से जोड़तोड़ की तुलना में अधिक महंगा है)
- प्रासंगिकता द्वारा क्रमबद्ध परिणामों की सूची लौटाता है
किसी को भी इस तरह से कुछ भी आया है? मुझे लगता है कि StackOverflow सॉफ्टवेयर सिफारिशों के लिए पूछने की जगह नहीं है, लेकिन उपरोक्त में (अब और नहीं!) निहित है: क्या मैं इस बारे में सही तरीके से सोच रहा हूं?
संपादित करें
मुझे इस विषय पर एक अच्छा पेपर (पीडीएफ) मिला । कुछ नोट्स और अंश:
एडिट-डिस्टेंस फ़ंक्शंस सम्मिलित या विलोपन के अनुक्रम में अपेक्षाकृत कम लागत प्रदान करते हैं
मोंगर-एलकन डिस्टेंस फंक्शन (Monge & Elkan 1996), जो विशेष रूप से लागत मापदंडों के साथ स्मिथ-वाटरमैन डिस्टेंस फंक्शन (डरबन एट अल 1998) का एक affine वेरिएंट है।
के लिए स्मिथ-वाटरमैन दूरी (विकिपीडिया) , "इसके बजाय कुल अनुक्रम को देखने का, स्मिथ-वाटरमैन एल्गोरिथ्म सभी संभव लंबाई के क्षेत्रों तुलना करता है और समानता उपाय अनुकूलित करता है।" यह n- ग्राम दृष्टिकोण है।
मोटे तौर पर एक समान मीट्रिक, जो एडिट-डिस्टेंस मॉडल पर आधारित नहीं है, जोरो मीट्रिक (जारो 1995; 1989; विंकलर 1999) है। रिकॉर्ड-लिंकेज साहित्य में, इस पद्धति के वेरिएंट का उपयोग करके अच्छे परिणाम प्राप्त किए गए हैं, जो दो तारों के बीच आम पात्रों की संख्या और क्रम पर आधारित है।
विंकलर (1999) के कारण इसका एक प्रकार सबसे लंबे समय तक सामान्य उपसर्ग की लंबाई पी का उपयोग करता है
(मुख्य रूप से शॉर्ट स्ट्रिंग्स के लिए अभिप्रेत लगता है)
पाठ पूरा करने के उद्देश्यों के लिए, मोंगर-एल्कान और जारो-विंकलर दृष्टिकोण सबसे अधिक समझ में आता है। जोकर मेट्रिक के लिए विंकलर के अतिरिक्त प्रभावी रूप से शब्दों की शुरुआत को अधिक जोर से तौलता है। और मोंगर-एलकन के स्नेह पहलू का मतलब है कि एक शब्द को पूरा करने की आवश्यकता (जो कि केवल परिवर्धन का एक क्रम है) इसे बहुत भारी नहीं होगा।
निष्कर्ष:
TFIDF रैंकिंग ने कई टोकन-आधारित दूरी मेट्रिक्स के बीच सर्वश्रेष्ठ प्रदर्शन किया, और मेन्ज और एल्कान द्वारा प्रस्तावित ट्यून एफाइन-गैप-एडिट-डिस्टेंस मीट्रिक ने कई स्ट्रिंग एडिट-डिस्टेंस मेट्रिक्स के बीच सर्वश्रेष्ठ प्रदर्शन किया। एक आश्चर्यजनक रूप से अच्छी दूरी की मीट्रिक एक तेजी से अनुमानी योजना है, जो जरो द्वारा प्रस्तावित है और बाद में विंकलर द्वारा विस्तारित की गई है। यह लगभग स्पंज-एल्कान योजना के रूप में अच्छी तरह से काम करता है, लेकिन तेजी से परिमाण का एक क्रम है। TFIDF विधि और Jaro-Winkler के संयोजन का एक सरल तरीका है, TFIDF में उपयोग किए जाने वाले सटीक टोकन मैचों को Jaro- Winkler योजना के आधार पर अनुमानित टोकन मैचों के साथ बदलना। यह संयोजन औसत रूप से यारो-विंकलर या टीएफआईडीएफ की तुलना में थोड़ा बेहतर प्रदर्शन करता है, और कभी-कभी बहुत बेहतर प्रदर्शन करता है। यह इस पत्र में माने जाने वाले कई बेहतरीन मैट्रिक्स के सीखे हुए संयोजन के प्रदर्शन के करीब भी है।