2009-12-08 15 views
16

में "क्या आपका मतलब XYZ" सुविधा बनाने के लिए विचार मैं उपयोगकर्ताओं को व्यवसायों की एक बड़ी सूची के माध्यम से खोज करने की क्षमता देना चाहता हूं, लेकिन फिर भी निकटतम मिलान ढूंढता हूं।वेबसाइट

क्या किसी के पास इस बारे में कोई सिफारिश है कि जब आप सरल शब्दकोष शब्दों को लक्षित नहीं कर रहे हैं, लेकिन इसके बजाय जटिल नाम जैसे एबीसी बिजनेस नेम?

सम्मान।

+0

+1 अधिक अच्छे उत्तरों को देखने के लिए। –

+0

मैं सहमत हूं। मैं अपने साथी सॉफ्टवेयर इंजीनियरों के ज्ञान की गहराई की प्रशंसा करता हूं और इन सभी उत्तरों की अच्छी लीड हैं। –

उत्तर

7

Levenshtein distance पर विकिपीडिया लेख देखें। यह आपके मामले में सी # के किसी भी भाषा में एल्गोरिदम को लागू करने के लिए अपने सिर को लपेटने और बहुत आसान बनाने के लिए एक साधारण सरल अवधारणा है।

मुझे आपके लिए here के लिए सी # में एक उदाहरण मिला।

इसके अलावा, here Google के पीटर Norvig से एक वर्तनी सुधारक का एक उदाहरण है। एसओ पॉडकास्ट पर कुछ एपिसोड पहले कहा गया था कि जॉन स्कीट ने सी # में इसी एल्गोरिदम के पुनर्लेखन का प्रयास किया था। सुनिश्चित नहीं है कि उसने इसे पूरा किया है और/या इसे सार्वजनिक रूप से उपलब्ध कराया है।

+0

ग्रेट सामान। मैं इसे सर्वोत्तम संभव प्रदर्शन प्राप्त करने के लिए एसक्यूएल सर्वर-साइड को एक स्पोक के रूप में संचालित करने के लिए अनुकूलित करने जा रहा हूं और जब कोई मिलान नहीं होता है तो इसका उपयोग करें। अंतर्दृष्टि के लिए धन्यवाद। –

+0

एक अद्यतन के रूप में, इसे यहां सी # में लागू किया गया है http://www.codegrunt.co.uk/2010/11/02/C-Sharp-Norvig-Spelling-Corrector.html –

2

कीवर्ड मिलान का उपयोग करने और दूरी आधारित समानता को संपादित करने पर विचार करें। 'वास्तव में क्लिक' करने के लिए 'मूल खोज' के साथ मिलकर मिल सकता है।

1

यह शायद एक पागल समाधान है, लेकिन क्या आप अंतरिक्ष के नाम से व्यवसाय का नाम विभाजित कर सकते हैं और फिर सभी वस्तुओं या शायद पहले जोड़े को खोज सकते हैं।

तो आप 'एबीसी' और 'बिजनेस' पर खोज कर सकते हैं लेकिन 'नाम' छोड़ दें क्योंकि इसमें बहुत अधिक समय लग सकता है।

आप यह भी देखने के लिए जांच सकते हैं कि स्ट्रिंग एक निश्चित लंबाई का है, फिर ट्रिम करें और केवल पहले 5 अक्षरों पर खोजें।

क्या आपने अपने व्यवसायों के माध्यम से खोज करने के तरीके के रूप में "soundex" पर एक नज़र डाली है। दोबारा, मुझे लगता है कि आपको अंतरिक्ष द्वारा नाम को विभाजित करने की आवश्यकता होगी।

1

आप SQL सर्वर SOUNDEX और DIFFERENCE फ़ंक्शंस देख सकते हैं। SOUNDEX वर्णों का एक अनुक्रम (जैसे एक शब्द) को 4-वर्ण कोड में परिवर्तित करता है जो समान ध्वनि वाले शब्दों के लिए समान होगा। अंतर एक संख्या देता है जो दर्शाता है कि ध्वनि पर आधारित "अलग" दो तार कैसे होते हैं।

उदाहरण के लिए, आप SOUNDEX फ़ंक्शन के आधार पर एक गणना कॉलम बना सकते हैं और बाद में उस कॉलम पर मिलान कर सकते हैं। या आप एक WHERE खंड में अंतर का उपयोग कर सकते हैं।

+1

आप Google खोज भी कर सकते हैं मेटाफोन, जो मूल रूप से साउंडएक्स का एक अधिक जटिल संस्करण है। साउंडएक्स वास्तव में 1 9 18 में बनाया गया था और यह एक बहुत ही सरल/मूल एल्गोरिदम है। मेटाफोन आम तौर पर बेहतर मैचों देगा, लेकिन एसक्यूएल में नहीं बनाया गया है, हालांकि इसके आसपास कई टी-एसक्यूएल संस्करण हैं – Sparky