2013-08-22 91 views
1

我有一個藥品名稱(regular_list)和一個新名稱列表(new_list)。我想檢查new_list中的名稱是否已經存在於regular_list中。問題是名稱new_list可能有一些錯字錯誤,我希望這些名稱被視爲與常規列表的匹配。我知道,使用stringdist是解決問題的辦法,但我需要一個機器學習算法用於拼寫檢查的機器學習算法

+0

[機器學習克服錯字錯誤]的可能的重複(http://stackoverflow.com/questions/18329826/machine-learning-to-overcome-typo-errors) –

回答

0

因爲它已經在這裏machine learning to overcome typo errors提到,機器學習工具太多這樣的任務,但最簡單的一種可能性是合併那些方法。

一方面,您可以計算給定單詞x與每個詞典單詞d_i之間的edit distance。 Additionaly,你可以訓練探索每個字,如果給定的編輯距離已經學會了足夠的考慮xd_i一個missspelled版本分類

c(d_i, distance(x,d_i)) 

返回True(類1)。這可以爲您提供更一般的模型,然後不使用機器學習,因爲您可以爲每個字典單詞設置不同的閾值(有些單詞比其他單詞更常拼錯),但很顯然,您必須準備一個形式爲(misspelled_word, correct_one)(和也加上(correct_one, correct_one)。

您可以使用任何類型的二進制分類器來執行此類任務,它可以處理「真實」輸入數據。

+0

繼續上面的問題。我的數據庫常規列表大約有150,000個單詞,而新列表大約有350,000個單詞。兩個項目之間的計算距離需要(150,000 * 350,000個搜索)。它的工作真的很慢。請問我可以找到一個更好的方法 – rohit

+0

有幾十種方法來加快速度。您可以構建各種類型的索引,這些索引會切斷距離太大而無法考慮的數據庫部分(可以通過例如散列3個字母前綴和3個字母后綴在固定時間內完成並僅查找那些前綴或後綴匹配perfercly)。對於大型搜索,您應該考慮使用現有的搜索引擎,例如。 lucene http://lucene.apache.org/core/ – lejlot

+0

可以使用任何數據庫來解決這個問題。假設我把這兩個表格作爲regular_list和新的_list。然後通過查詢我可以比較上述距離,並讓數據庫相應地返回解決方案? – rohit