2010-07-02 9 views
9

मैं PHP के लिए Damerau–Levenshtein एल्गोरिदम के कार्यान्वयन की तलाश कर रहा हूं, लेकिन ऐसा लगता है कि मुझे अपने दोस्त google के साथ कुछ भी नहीं मिला। अब तक मुझे PHP लागू लेवेनशेटिन (डैमरू ट्रांसपोजिशन के बिना, जो बहुत महत्वपूर्ण है) का उपयोग करना है, या मूल स्रोत कोड (सी, सी ++, सी #, पर्ल में) प्राप्त करें और इसे PHP में लिखें (अनुवाद करें)।डैमरौ-लेवेनशेटिन php

क्या किसी को PHP कार्यान्वयन का कोई ज्ञान है?

मैं अपने कॉरपोरेट इंट्रानेट पर "क्या आपका मतलब है:" एक्सटेंशन के लिए ध्वनि और डबल मेटाफोन का उपयोग कर रहा हूं, और मैं परिणामों को बेहतर तरीके से हल करने में मदद के लिए डेमरौ-लेवेनशेटिन एल्गोरिदम को कार्यान्वित करना चाहता हूं। इस विचार के समान कुछ: http://www.briandrought.com/blog/?p=66, मेरा कार्यान्वयन पहले 5 चरणों के समान है।

+2

विकिपीडिया पृष्ठ पर स्यूडोकोड नहीं है; निश्चित रूप से PHP के लिए बंदरगाह के लिए बहुत मुश्किल नहीं होगा? – Piskvor

उत्तर

6

मेरे पास stab at it पीछे एक रिकर्सिव समाधान था।

/* 
* Naïve implementation of Damerau-Levenshtein distance 
* (Does not work when there are neighbouring transpositions)! 
*/ 
function DamerauLevenshtein($S1, $S2) 
{ 
    $L1 = strlen($S1); 
    $L2 = strlen($S2); 
    if ($L1==0 || $L2==0) { 
     // Trivial case: one string is 0-length 
     return max($L1, $L2); 
    } 
    else { 
     // The cost of substituting the last character 
     $substitutionCost = ($S1[$L1-1] != $S2[$L2-1])? 1 : 0; 
     // {H1,H2} are {L1,L2} with the last character chopped off 
     $H1 = substr($S1, 0, $L1-1); 
     $H2 = substr($S2, 0, $L2-1); 
     if ($L1>1 && $L2>1 && $S1[$L1-1]==$S2[$L2-2] && $S1[$L1-2]==$S2[$L2-1]) { 
      return min (
       DamerauLevenshtein($H1, $S2) + 1, 
       DamerauLevenshtein($S1, $H2) + 1, 
       DamerauLevenshtein($H1, $H2) + $substitutionCost, 
       DamerauLevenshtein(substr($S1, 0, $L1-2), substr($S2, 0, $L2-2)) + 1 
      ); 
     } 
     return min (
      DamerauLevenshtein($H1, $S2) + 1, 
      DamerauLevenshtein($S1, $H2) + 1, 
      DamerauLevenshtein($H1, $H2) + $substitutionCost 
     ); 
    } 
} 
1

केवल निर्मित php फ़ंक्शन का उपयोग करने के बारे में ...?

http://php.net/manual/en/function.levenshtein.php

int levenshtein (string $str1 , string $str2) 


int levenshtein (string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del)