Java 名称中的错误更正

Java 名称中的错误更正,java,c++,algorithm,error-correction,Java,C++,Algorithm,Error Correction,我正试图设计一种算法,在名称中执行错误更正。我的方法是建立一个具有正确名称的数据库,计算每个名称与输入名称之间的编辑距离,然后建议5或10个最接近的名称 这项任务与标准的文字纠错有很大不同,因为有些名称可能会被首字母替换。例如,“Jonathan Smith”和“J.Smith”实际上非常接近,很容易被认为是同一个名称,因此编辑距离应该非常小,如果不是0的话。另一个挑战是,有些名字可能写得不一样,但听起来却一样。例如,Shnaider和Schneider是由不同地区的人编写的同名版本(我想有更好

我正试图设计一种算法,在名称中执行错误更正。我的方法是建立一个具有正确名称的数据库,计算每个名称与输入名称之间的编辑距离,然后建议5或10个最接近的名称

这项任务与标准的文字纠错有很大不同,因为有些名称可能会被首字母替换。例如,“Jonathan Smith”和“J.Smith”实际上非常接近,很容易被认为是同一个名称,因此编辑距离应该非常小,如果不是0的话。另一个挑战是,有些名字可能写得不一样,但听起来却一样。例如,
Shnaider
Schneider
是由不同地区的人编写的同名版本(我想有更好的例子)。还有一个例子——想象一下写尼赫鲁时可能出现的所有错误,其中大部分与真名无关。同样,它们中的大多数可能在语音上是相似的

显然,Lucene的纠错算法在这里对我没有帮助,因为它不能处理上述情况

所以我的问题是:你知道有哪一个库能够对名称进行错误更正吗?你能提出一些处理上述情况的算法吗


我对C++或java中的库感兴趣。至于算法建议,任何语言或伪代码都可以。

有关语音匹配,请参阅


我认为修改Levenshtein距离算法,将“缩写为初始值”和“从初始值展开”视为单距离编辑应该很简单,但细节目前我无法理解。

您也可以查看。

我在这里看到两种可能的方法:1。拥有同义词词典,并在计算距离时将其包括在内。2.使用你描述的逻辑的人工智能模块。我相信对我来说只有选项2是可能的,因为我有数百万个名字,不同的地区,不同的同义词。这里的问题是如何实现我特别描述的语音相似部分的逻辑。我还想确保没有类似的东西已经存在。做这件事要非常小心。我刚刚结束了与加州大学圣地亚哥分校的一场长达数周的辩论,在那里我做了几年的学生,直到2009年。他们向我收取退票的费用。直到我最终让他们掏出支票的图像,而不是仅仅看他们的记录时,问题才得以解决。这张支票实际上是由一个名字和姓氏相同的人写的,但是中间有个首字母。会计部门根据我的名字认为它属于我的账户。即使是精确的姓名匹配也不能用于确定数据是否与同一个人有关。@PatriciaShanahan我打算使用该算法进行错误更正,而不是用于识别,因此我在这里应该是安全的。此外,我将提供几个排名最高的选项,而不仅仅是一个。Soundex绝对是我可以利用的东西。谢谢你:)