2011-04-03 42 views
6

我需要分析其中存在的禁止文字。假設黑名單是「禁止」這個詞。這個詞有很多形式。在文中,這個詞可以是,例如:「禁止」,「禁止」,「禁止」。爲了讓這個詞成爲最初的形式,我使用了一個流程詞形化。你的建議?分析文本(詞形變化,編輯距離)

怎麼樣錯別字?
例如:「F0rb1d」。我認爲使用damerau-Levenshtein或其他。你有建議嗎?

而如果文本如下寫:
「ForbiddenInformation.Privatecorrespondenceofthecompany。」 OR 「F0rb1dden1nformation.Privatecorresp0ndenceofthec0mpany。」 (是的,沒有空白)

如何解決這個問題?
最好是快速算法,因爲文本是實時處理的。
也許有什麼提示,以提高性能(如何存儲等)?

對不起,我的英文。謝謝。

+0

不完全重複,但類似[問題](http://stackoverflow.com/questions/246961/algorithm-to-find-similar-text)[tions](http://stackoverflow.com/questions/4067105 /檢測重複的相似文本 - 中 - 大數據集)。 – khachik 2011-04-03 15:34:02

回答

2

就我所知的算法而言,有兩種可能的解決方案。

您可以嘗試使用動態編程,LCS(最長公用子序列)。它將搜索原文爲所期望的字爲圖案,我相信這是O(MN):

http://en.wikipedia.org/wiki/Longest_common_subsequence_problem http://www.ics.uci.edu/~eppstein/161/960229.html

雖然容易是使用文本搜索算法。我知道的最好的是KMP它是O(n)。對於字符比較,您可以將它們分組爲如{i I l(L)1},{o O 0}等集合。但你可以修改這個不匹配所有字母(禁止 - >禁止)。

http://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm

所以,現在你可以比較這兩個和你的建議的好處。