7

我需要分析文本中存在的禁用词。假设黑名单是单词:“禁止”。这个词有多种形式。在文本中,单词可以是,例如:“forbidding”、“forbidden”、“forbad”。为了将这个词带入初始形式,我使用了过程词形还原。你的建议?

错别字怎么办?
例如:“F0rb1d”。我认为使用 damerau–Levenshtein 或其他。你的建议?

如果文本是这样写的
“ForbiddenInformation.Privatecorrespondenceofthecompany”。或“F0rb1dden1nformation.Privatecorresp0ndenceofthec0mpany。” (是的,没有空格)

如何解决这个问题呢?
最好是快速算法,因为文本是实时处理的。
也许有什么技巧可以提高性能(如何存储等)?

4

2 回答 2

3

据我所知算法有两种可能的解决方案。

您可以尝试使用动态编程,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

所以现在你可以比较这两者的好处和你的建议。

于 2011-04-05T09:37:12.840 回答
1

您还可以使用 RegEx Matches 来检查单词。 http://www.c-sharpcorner.com/uploadfile/prasad_1/regexppsd12062005021717am/regexppsd.aspx

于 2011-04-05T09:54:33.387 回答