我需要比較可以用多種方式寫入的名稱。例如,像聖托馬斯這樣的名字有時會寫成聖托馬斯或聖托馬斯。最好是,我正在尋求建立一個功能,使比較「平等」的百分比,像一些論壇(這篇文章是5%編輯例如)。PHP比較字符串是否(幾乎)相等
回答
PHP有兩個(主要)內置函數。
levenshtein
它計算從string1產生string2需要多少次更改(移除/添加/替換)。 (越低越好)
和
similar_text
它返回(越高越好)匹配的字符的數目。請注意,您可以傳遞參考作爲第三個參數,它會給你一個百分比。
<?php
$originalPost = "Here's my question to stack overflou. Thanks /h2ooooooo";
$editedPost = "Question to stack overflow.";
$matchingCharacters = similar_text($originalPost, $editedPost, $matchingPercentage);
var_dump($matchingCharacters); //int(25)
var_dump($matchingPercentage); //float(60.975609756098) (hence edited 40%)
?>
啊levenshtein函數是完美的!非常感謝,將在6分鐘內接受你的答案:-)。 – dirk 2013-02-12 12:03:48
如果你想要更先進的東西,看看[這篇文章](http://web.archive.org/web/20061007123913/http://www.english.upenn.edu/~jlynch/Computing/compare.html) 。 – gronostaj 2013-02-12 12:07:45
@gronostaj:謝謝......但對於我的應用程序來說,這應該足夠好。性能似乎也可以:-)。 – dirk 2013-02-12 12:12:40
退房levenshtein()
,這你想要做什麼,是比較有效的(但不是非常有效的): http://www.php.net/manual/en/function.levenshtein.php
您可以使用不同的方法。
您可以使用similar_text()
函數來檢查相似性。
OR
可以使用levenshtein()
功能,找出...
的Levenshtein距離被定義爲必須更換,插入或刪除字符轉換成STR1 STR2的數量降到最低
然後檢查您的支票的合理閾值。
兩個字符串之間的編輯距離通常是指Levenshtein距離。
$v1 = 'pupil';
$v2 = 'people';
# TRUE if $v1 & $v2 have similar pronunciation
soundex($v1) == soundex($v2);
# Same but it use a more accurate comparison algorithm
metaphone($v1) == metaphone($v2);
# Calculate how many common characters between 2 strings
# Percent store the percentage of common chars
$common = similar_text($v1, $v2, $percent);
# Compute the difference of 2 text
$diff = levenshtein($v1, $v2);
所以,要麼levenshtein($v1, $v2)
或similar_text($v1, $v2, $percent)
會爲你做,但仍有權衡。 levenshtein()
算法的複雜度爲O(m*n)
,其中n和m是v1和v2的長度(與similar_text()
相比,相當好,即O(max(n,m)**3)
,但仍然很昂貴)。
- 1. Smalltalk - 比較兩個字符串是否相等
- 2. 如何比較NSArray的* ALL *字符串是否相等?
- 3. 比較兩個字符串是否相等
- 4. 字符串比較等效
- 5. 如何比較兩個字符串在php中的相等性?
- 6. 比較矢量<int>幾乎相等,STL算法 - C++
- 7. C#字符串相等比較中StringComparison.CurrentCultureIgnoreCase的代價是多少?
- 8. PHP字符串 - INT比較
- 9. 如何使用GSON比較兩個JSON字符串是否相等?
- 10. String比較null和empty是否相等
- 11. 比較兩次公差是否相等?
- 12. 比較兩組是否相等遞歸?
- 13. Javascript/PHP字符串相等
- 14. 比較一個字符串和幾個不同的字符串
- 15. 覆蓋等於和比較字符串
- 16. 比較字符串顯示不等於
- 17. 比較字符串在KSH平等
- 18. 兩個字符串使用'='進行比較相等,但'失敗'比較
- 19. 所有的PHP相等比較是否對稱?
- 20. Java,「指針」相等和字符串比較
- 21. SQL沒有正確評估字符串的相等比較
- 22. .NET Webhandler測試字符串相等性比較失敗
- 23. 在intern()方法後比較兩個相等的字符串
- 24. 如何比較兩個字符串,如果它們不相等
- 25. 2個相等字符串的比較返回false
- 26. 在Swift中比較字符串相等:String!=(String)
- 27. C#比較相似的字符串
- 28. C#字符串比較相當於假
- 29. Python字符串比較相似性
- 30. 字符串比較
當你不在尋找百分比時,另一個可能性是正則表達式匹配。但要做到這一點,人們必須知道這兩個名字可以有多少不同。 – 2013-02-12 11:58:13
我認爲這是你想要的:http://stackoverflow.com/questions/2285201/php-smart-error-tolerating-string-comparison – fons 2013-02-12 11:58:41
[similar-text](http://www.php.net/manual /de/function.similar-text.php) – bitWorking 2013-02-12 11:58:55