名称中的错误纠正

7
我正在尝试设计一种算法,用于对姓名进行纠错。我的方法是建立一个包含正确姓名的数据库,计算每个姓名与输入姓名之间的编辑距离,然后建议5或10个最接近的姓名。
这项任务与标准单词纠错有很大不同,因为有些姓名可能会被缩写。例如,“Jonathan Smith”和“J. Smith”实际上非常相似,可以轻松地被认为是同一个名字,因此如果不是0,则编辑距离应该非常小。另一个挑战是有些姓名可能会以不同的方式书写,但发音相同。例如,Shnaider和Schneider是由不同语境的人写的同一个名字的版本(我想还有更好的例子)。还有另一种情况 - 想象一下在写Jawaharlal Nehru时可能出现的所有可能的错误,其中大多数与真实姓名无关。同样,它们中的大多数在音韵上可能是相似的。
显然,Lucene的纠错算法在这里对我没有帮助,因为它不能处理上述情况。
因此,我的问题是:您是否了解任何能够对姓名进行纠错的库?您能否提出一些处理以上情况的算法?
我对C ++或Java中的库感兴趣。至于算法提议,任何语言或伪代码都可以。

我看到这里有两种可能的方法:1.拥有一个同义词词典,并在计算距离时包含它。2.使用您描述的逻辑的一些人工智能模块。 - SomeWittyUsername
我相信对于我来说只有第二个选项是可行的,因为我有数百万个名称、不同的语言环境和不同的同义词。这里的问题是如何实现我所描述的逻辑,特别是语音相似性部分。此外,我想确保没有类似的东西已经存在。 - Ivaylo Strandjev
非常小心地做这件事。我刚刚与UCSD进行了为期几周的争论,我在那里学习了几年,最后是在2009年结束的。他们正在向我收取一张被退回的支票费用。只有当我最终让他们挖出支票的图像而不是仅查看他们的记录时,才得以解决。实际上,支票是由一个同名但有中间名的人填写的。会计部门认为它属于我的帐户基于名称近似匹配。即使精确名称匹配也无法确定数据是否属于同一个人。 - Patricia Shanahan
@PatriciaShanahan 我打算使用该算法进行错误校正而不是识别,所以我应该是安全的。此外,我将提供几个排名最高的选项,而不仅仅是一个。 - Ivaylo Strandjev
2个回答

6

关于音标匹配,请参见Soundex

我认为修改Levenshtein距离算法,将“缩写为首字母”和“从首字母扩展”视为单一距离编辑是很简单的,但细节目前超出了我的能力范围。


Soundex绝对是我能够利用的东西。谢谢你:) - Ivaylo Strandjev

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接