Regex 验证专有名称(使用Perl)

Regex 验证专有名称(使用Perl),regex,perl,names,Regex,Perl,Names,我有一个15万姓的人口普查列表,并试图用它来验证现有数据库中人名的拼写 显然,我的数据库中有许多民族名称与人口普查名单不匹配,但显然没有拼错(意大利语名称如“Petroni”,瑞典名称如“Magnudotter”) 我想创建一个函数(在Perl中)来检测数据库中的名字和普查列表中其他非常流行的名字之间的细微差异,即可能的拼写错误(有频率编号) 我可以想象这个算法,但在我深入研究之前——有没有什么建议可以可靠地做到这一点——也就是说,不会产生太多误报 谢谢 基本上,您正在编写拼写检查器。您可能希望

我有一个15万姓的人口普查列表,并试图用它来验证现有数据库中人名的拼写

显然,我的数据库中有许多民族名称与人口普查名单不匹配,但显然没有拼错(意大利语名称如“Petroni”,瑞典名称如“Magnudotter”)

我想创建一个函数(在Perl中)来检测数据库中的名字和普查列表中其他非常流行的名字之间的细微差异,即可能的拼写错误(有频率编号)

我可以想象这个算法,但在我深入研究之前——有没有什么建议可以可靠地做到这一点——也就是说,不会产生太多误报


谢谢

基本上,您正在编写拼写检查器。您可能希望查看一个开源的多语言拼写检查器,例如,并了解它们的功能。您甚至可以实现您想要的aspell字典

有很多算法可以实现。单词之间有一个算法,而且有,但看起来相当不错

这对于比较几个词来说是很好的,但是你必须在150k之间进行选择。你可以看看它是否足够快。您可以尝试缓存结果。但它仍然是一个O(n)算法。相反(或另外),您可以使用创建索引。一般来说,这些索引词是根据它们的发音来进行匹配的。一旦为每个单词生成了索引,就可以很快地将一个新词与索引进行匹配。显然,这取决于语言听起来像什么的文化观念,这就是为什么有许多算法,每个算法都有不同的优化。您可以使用不同的算法创建多个索引,然后全部尝试


您甚至可以将两者结合起来,对语音索引进行近似字符串匹配。

@PatrickJ.S。我觉得这有点苛刻。问题是关于算法和技术,而不是关于编写代码。@schwern:是的,对不起,你是对的