【问题标题】:Analyze text (lemmatization, edit distance)分析文本(词形还原、编辑距离)
【发布时间】:2011-04-03 12:45:11
【问题描述】:

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

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

如果文字是这样写的呢:
“禁止信息。公司的私人通信。”或者 “F0rb1dden1nformation.Privatecorresp0ndenceofthec0mpany。” (是的,没有空格)

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

【问题讨论】:

标签: c# nlp similarity lemmatization


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您还可以使用正则表达式匹配来检查单词。 http://www.c-sharpcorner.com/uploadfile/prasad_1/regexppsd12062005021717am/regexppsd.aspx

    【讨论】: