我一直在尋找輕量級的庫,它可以讓我給它一大堆字,然後問它一個給定的單詞是否會有任何接近的匹配.z輕量級圖書館可以提示從有界集合中提出不同拼寫的單詞嗎?
我不是特別在意底層算法(我認爲簡單的海明距離算法可能就足夠了,我是否自己來完成這項任務)。
我只是在開發一種小型語言,我發現當檢測到一個「未定義的類」錯誤(很多次它只是一個拼錯的單詞)時,向用戶提供建議很好用。儘管如此,我不想在這個問題上浪費太多時間。
感謝
我一直在尋找輕量級的庫,它可以讓我給它一大堆字,然後問它一個給定的單詞是否會有任何接近的匹配.z輕量級圖書館可以提示從有界集合中提出不同拼寫的單詞嗎?
我不是特別在意底層算法(我認爲簡單的海明距離算法可能就足夠了,我是否自己來完成這項任務)。
我只是在開發一種小型語言,我發現當檢測到一個「未定義的類」錯誤(很多次它只是一個拼錯的單詞)時,向用戶提供建議很好用。儘管如此,我不想在這個問題上浪費太多時間。
感謝
Levenshtein距離是處理它的常用方法。只需將所有單詞添加到列表中,然後蠻力迭代它並返回最小距離。下面是一個帶Levenschtein函數的函數庫:http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringUtils.html
如果您有大量的單詞並且希望它運行得很快,那麼您必須使用ngrams。將每個單詞分散到bigrams中,然後將(bigram,單詞)添加到地圖中。使用地圖查找目標單詞中的雙字母,然後遍歷候選字詞。不過,這可能比你想做的還要多。
不一定庫,但我認爲this article可能是很有益的。它主要描述一個拼寫校正器如何在python中工作的一般工作方式,但也有一個用於java實現的鏈接,如果您正在尋找具體的java實現,您可能會使用該鏈接(請注意,我沒有專門使用java之前)
嗯,這樣比較好。 –
速度不是問題,我敢打賭,在任何時候都不會有超過2-3個單詞的搜索,並且最多20-30。它永遠是瞬間的。 –