Java中数据规范化的拼写校正

我正在寻找一个Java库来对用户生成的文本内容进行初始拼写检查/数据规范化,想象一下在Facebook个人资料中输入的兴趣。

此文本将在某个时刻(在拼写纠正之前或之后,无论哪种方式更好)被标记化,并且其中一些用作搜索(完全匹配)的键。 减少拼写错误等会产生更多匹配会很不错。 如果校正在令牌上的表现要好于一个单词,那就更好了,例如“喝咖啡”会变成“喝咖啡”而不是“喝咖啡”。

我找到了以下用于拼写纠正的Java库:

  1. JAZZY似乎没有积极发展。 此外,由于在社交网络配置文件和多字令牌中使用非标准语言,基于字典距离的方法似乎不合适。
  2. APACHE LUCENE似乎有一个统计拼写检查器应该更合适。 这里的问题是如何创建一个好的字典? (否则我们不使用Lucene,因此没有现有索引。)

欢迎任何建议!

你想要实现的不是拼写纠正器而是模糊搜索。 Peter Norvig的论文是一个很好的起点,可以根据字典对候选人进行模糊搜索。

或者看看BK-Trees。

n-gram索引(由Lucene使用)对于较长的单词产生更好的结果。 在给定的编辑距离下生成候选者的方法可能对于在普通文本中找到的单词而言足够好,但对于名称,地址和科学文本不够好。 不过,它会增加你的索引大小。

如果你有索引的文本,你有你的文本语料库(你的字典)。 无论如何,只能找到数据中的内容。 您不需要使用外部字典。

一个很好的资源是信息检索简介 – 词典和容忍检索 。 上下文敏感的拼写纠正有一个简短的描述。

关于填充Lucene索引作为拼写检查器的基础,这是解决问题的好方法。 Lucene有一个开箱即用的SpellChecker你可以使用。

网上有很多单词词典 ,你可以下载并用作你的lucene索引的基础。 我建议用一些领域特定文本补充这些文本,例如,如果您的用户是医务人员,那么可以用来自医学论文和出版物的源文本补充字典。

试试Peter Norvig的拼写检查 。

您可以访问Gutenberg项目或Internet Archive中的大量语料库。

另外,我认为维基词典可以帮助你。 你甚至可以直接下载 。