让我举个例子来解释一下。我们有以下文本:
Comme Il Faut成立于1927年。该烟草公司以为其全球合作伙伴生产定制的自有品牌而闻名。
这是普通文本。而是下面的文本:
“1927年的CommeIlFautwasfounded。这家烟草公司以为其全球合作伙伴生产定制的私人标签而闻名。”
这是文本异常:打字错误,没有空格的单词,可能还有其他东西。
如何搜索这样的异常?
有什么算法可以解决这个问题(统计)?
希望结果是一个百分比:例如,80%的异常。
谢谢。
发布于 2011-04-15 16:16:59
构建一个包含字典中所有已知单词的Trie树。获取文本中出现的每个单词,并尝试在Trie树中找到它。如果您没有找到它,那么尝试匹配长度为-k的前缀。如果找到匹配项,则对其余k个字符应用相同的过程。它是递归的,可以捕获两个以上的连接单词
发布于 2011-04-15 19:06:12
另一种简单的方法是使用edit distance algorithm。此算法计算将字符串转换为另一个字符串所需执行的编辑操作(插入、删除或替换)的最小数量。通过一些额外的逻辑,您也可以很容易地让此算法输出操作。
但是,这假设您既有正确的字符串,也有损坏的字符串。如果你只有断掉的弦,这就更难了。在这种情况下,我建议您尝试前面提到的trie方法,或者使用ispell等外部库来处理此逻辑。您可以查看ispell或其变体的代码,以了解此类任务可能会变得多么复杂。
发布于 2011-04-15 15:31:43
下面几个链接可能会有帮助:
http://www.codeproject.com/KB/cs/spellcheckdemo.aspx
http://www.codeproject.com/KB/recipes/spellcheckparser.aspx
https://stackoverflow.com/questions/5673502
复制相似问题