2010-11-03 11 views
8

मैं इस के कुछ प्रकार लागू करने की आवश्यकता:फजी मिलान

string textToSearch = "Extreme Golf: The Showdown"; 
string textToSearchFor = "Golf Extreme Showdown"; 
int fuzzyMatchScoreThreshold = 80; // One a 0 to 100 scale 
bool searchSuccessful = IsFuzzyMatch(textToSearch, textToSearchFor, fuzzyMatchScoreThreshold); 
if (searchSuccessful == true) 
{ 
    -- we have a match. 
} 

यहाँ समारोह ठूंठ सी # में लिखा है:

public bool IsFuzzyMatch (string textToSearch, string textToSearchFor, int fuzzyMatchScoreThreshold) 
{ 
    bool isMatch = false; 
    // do fuzzy logic here and set isMatch to true if successful match. 
    return isMatch; 
} 

लेकिन मुझे कोई किसी भी विचार कैसे तर्क को लागू करना IsFuzzyMatch विधि में। कोई विचार? शायद इस उद्देश्य के लिए तैयार समाधान है?

+1

आप [लेवेनशेटिन दूरी] (http://en.wikipedia.org/wiki/Levenshtein_distance) की गणना कर सकते हैं, शब्दों का उपयोग अक्षरों के बजाय प्रतीक के रूप में करते हैं, जहां शब्दों को उनके लेवेनशेटिन दूरी के आधार पर बराबर माना जाता है। Levenshtein दूरी पर [कई SO विषयों] (http://stackoverflow.com/search?q= [सी% 23] + लेवेनशेटिन + दूरी) हैं। – dtb

+0

देखें http://stackoverflow.com/questions/451884/similar-string-algorithm/451910#451910 –

उत्तर

1

आपको Levenshtein Distance Algorithm की आवश्यकता है ताकि आप एक स्ट्रिंग से दूसरे में ऑपरेशन डालने, हटाने और संशोधित करने के लिए कैसे जा सकें। आप fuzzyMatchScoreThreshold एक लेवेनशेटिन दूरी है जो सरल तरीके से स्ट्रिंग की लंबाई तक विभाजित है।

9

मुझे डाइस कोइफिएंट, लेवेनशेटिन दूरी, सबसे लंबा आम उपक्रम, और कभी-कभी डबल मेटाफोन का संयोजन पसंद है। पहले तीन आपको थ्रेसहोल्ड वैल्यू प्रदान करेंगे। मैं उन्हें किसी तरह से गठबंधन करना पसंद करता हूं। YMMV।

मैंने अभी एक ब्लॉग पोस्ट पोस्ट किया है जिसमें इनमें से प्रत्येक के लिए सी # कार्यान्वयन है जिसे Four Functions for Finding Fuzzy String Matches in C# Extensions कहा जाता है।