我會解釋我的問題:如何在PHP中爲拼寫錯誤的單詞找到相似的單詞?
我有一個數據庫表country
。它有兩列:ID
和name
。
當我要搜索'paris'
,但拼錯字:'pares'
('e'
而不是'i'
),我不會得到任何DB結果。
我希望系統建議可能有助於搜索的類似詞彙。
所以,我尋求幫助寫一個腳本,它從數據庫中包含像類似的話建議:
我會解釋我的問題:如何在PHP中爲拼寫錯誤的單詞找到相似的單詞?
我有一個數據庫表country
。它有兩列:ID
和name
。
當我要搜索'paris'
,但拼錯字:'pares'
('e'
而不是'i'
),我不會得到任何DB結果。
我希望系統建議可能有助於搜索的類似詞彙。
所以,我尋求幫助寫一個腳本,它從數據庫中包含像類似的話建議:
在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'
基本上你需要檢查的相似反對的有效陣列巴黎,帕雷德斯,...等等。名字,當你沒有你的分貝結果。
我的想法:
soundex將返回代表其聲音的單詞的數字代碼。聽起來相似的詞將具有相同的soundex代碼。你可以有一個包含單詞和他們的soundex代碼的表格,你可以用它來查找類似的聲音單詞。然後,您可以使用它們的距離對它們進行排序。
如果你正在尋找的東西簡單,你只是想處理錯別字在你的數據庫查詢,你可以做
select * from country where city SOUNDS LIKE 'Paris'
而不是select * from country where city='Paris'
,你會想要使用MATCH() AGAINST()
聲明,其中MATCH()
給出了一個逗號分隔列表FULLTEXT
列,並且AGAINST()
是給出的你的字符串匹配。該語句返回匹配的相關性(在0和1之間),您可以使用它來確定是否返回行。
有關MySQL site的更多信息。
編輯:聲音建議是好主意,但某些拼寫錯誤會徹底改變單詞的發音,因此如果您使用該方法,您可能無法提供良好的建議。
由於大多數的PHP內部方法已經覆蓋,你也可以看看雅虎老闆拼寫建議服務,其相當有用 - >http://developer.yahoo.com/search/boss/boss_guide/Spelling_Suggest.html
**注**:'soundex'是好的英文單詞和整數,但其他語言的問題。 – Eray 2012-08-12 02:48:18
@codaddict有沒有什麼辦法可以按相關性排序? – 2015-12-11 06:07:27