2010-10-15 46 views
14

我會解釋我的問題:如何在PHP中爲拼寫錯誤的單詞找到相似的單詞?

我有一個數據庫表country。它有兩列:IDname

當我要搜索'paris',但拼錯字:'pares''e'而不是'i'),我不會得到任何DB結果。

我希望系統建議可能有助於搜索的類似詞彙。

所以,我尋求幫助寫一個腳本,它從數據庫中包含像類似的話建議:

回答

20

在PHP中,你應該使用metaphone它比更準確soundex

但是你的問題是從數據庫中獲取數據。你沒有提到數據庫。在MySQL中,您可以使用SOUNDEX函數。你只需要從

...where city = '$input_city' 

查詢更改where子句來

... where soundex(city) = soundex('$input_city') 

,甚至更好,你可以的,如果你使用MySQL使用SOUNDS LIKE運營商作爲

... where city sounds like '$input_city' 
+0

**注**:'soundex'是好的英文單詞和整數,但其他語言的問題。 – Eray 2012-08-12 02:48:18

+0

@codaddict有沒有什麼辦法可以按相關性排序? – 2015-12-11 06:07:27

4

基本上你需要檢查的相似反對的有效陣列巴黎,帕雷德斯,...等等。名字,當你沒有你的分貝結果。

我的想法:

  • 用戶搜索一些名字
  • 沒有確切的結果
  • 抓取所有的名字從數據庫
  • 使用levenshtein計算出最準確的提示用戶返回
9

soundex將返回代表其聲音的單詞的數字代碼。聽起來相似的詞將具有相同的soundex代碼。你可以有一個包含單詞和他們的soundex代碼的表格,你可以用它來查找類似的聲音單詞。然後,您可以使用它們的距離對它們進行排序。

如果你正在尋找的東西簡單,你只是想處理錯別字在你的數據庫查詢,你可以做

select * from country where city SOUNDS LIKE 'Paris'而不是select * from country where city='Paris'

2

,你會想要使用MATCH() AGAINST()聲明,其中MATCH()給出了一個逗號分隔列表FULLTEXT列,並且AGAINST()是給出的你的字符串匹配。該語句返回匹配的相關性(在0和1之間),您可以使用它來確定是否返回行。

有關MySQL site的更多信息。

編輯:聲音建議是好主意,但某些拼寫錯誤會徹底改變單詞的發音,因此如果您使用該方法,您可能無法提供良好的建議。

相關問題