2012-08-28 77 views
2

任何人都可以給我一個更好的方法(或者最優選的方法)來找到兩個字符串之間的匹配百分比(即這兩個字符串(例如名稱)與百分比之間的相關程度如何)使用模糊邏輯。任何人都可以幫我編寫代碼嗎?我真的想知道從哪裏開始..在php中查找兩個字符串之間的匹配百分比?

+7

使用一些模糊邏輯?當然,這裏有一個:'$ matchPercentage =($ str1 == $ str2)? 100:0;'。說真的,你能詳細說明一下嗎? – netcoder

+10

通過「更好」,我假設你已經看到了PHP自己的[similar_text()](http://www.php.net/similar_text)和[levenshtein()](http://www.php.net/levenshtein )? – user113215

+0

我不知道..我只需要一個更好的方法來找到兩個名稱字符串之間的百分比匹配(我的意思是幾乎所有的比較)..雖然我GOOGLE了它,我不能斷定哪個選擇? sry ..如果我不清楚.. @netcoder – user1518659

回答

4

我只是寫基於,不是字符的字符串比較函數 - 這裏是,萬一有人需要它:

function wordsof($s) { 
    $a = [];foreach(explode(" ",$s)as $w) $a[$w]++; 
    return $a; 
} 

function compare($s1,$s2) { 

    $w1 = wordsof($s1);if(!$w1) return 0; 
    $w2 = wordsof($s2);if(!$w2) return 0; 

    $totalLength = strlen(join("",$w1).join("",$w2)) || 1; 

    $chDiff = 0; 
    foreach($w1 as $word=>$x) if(!$w2[$word]) $chDiff+=strlen($word); 
    foreach($w2 as $word=>$x) if(!$w1[$word]) $chDiff+=strlen($word); 

    return $chDiff/$totalLength; 

} 

邏輯很簡單:它在另一個方向上查找一個字符串的每個字。長詞重量更多。它提供了一個介於0和1之間的浮點值。您可能希望在比較之前對字符串進行規範化 - 空格修剪,多個空格替換爲一個,全部小寫等等。此外,它不是很快,但由於單詞查找的東西...

如果你不想污染全局命名空間,你可以在比較器中實現「wordsof」。它爲了可讀性而分開。代碼也有所簡化,所以在使用它之前先進行測試,但它應該完成這項工作。當我們說話時,我正在使用原始版本。

相關問題