如何找到很难拼错名字的名字?


16

我认为这是一个可以通过一些数据挖掘和完善的算法解决的问题,但我不知道如何解决。欢迎提供有关使用哪些数据源以及应用哪种算法的任何指针。

背景:我是罗马尼亚-匈牙利人,他正在怀有波兰-乌克兰人的怀抱,并且还没有完全决定要定居哪个国家。正如您所期望的那样,选择一个给定的名称是最重要的,也是一个激烈的辩论。从我的角度来看,当我从一个国家搬到另一个国家时,有人拼错了我的名字时,我仍然要经历所有麻烦。例如,如果您被称为“ Adrian”,那么您在罗马尼亚会很幸运,只是发现您最终成为“ Adri e n”是一些法国官方文件。因此,我唯一的要求是在某些欧洲国家/地区极不可能使婴儿的名字拼写错误。

问题陈述:给定一组国家,例如法国,德国,瑞典,波兰和罗马尼亚,请查找适当发音的给定名称列表,这些名称不太可能被当地人拼写错误。

更正式地讲:令p(c,n)是一个函数,该函数返回名称n在国家c中拼写错误的可能性。给定C个国家集和 p₀个概率,找到N个给定名称集,使得

对于所有ÑÑÇÇP(C,N)<P 0

初步思路:核心问题是如何实现p(c,n)。可以尝试用一种启发式方法来近似它。显然,在两种情况下,名称可能会拼写错误:

  1. 在那个国家很少使用。
  2. 它类似于一个不同的名称,在那个国家很少使用。

我不确定如何使用互联网(例如Wikipedia)有效回答这两个问题。一个人怎么会只列出一个国家中经常使用的名字?人们会如何寻找相似的拼写?


1
与低至其他名称的编辑距离相比,我不确定人气是否会严重影响拼写错误的可能性。例如,汉娜(Hanna)听起来与汉娜(Hannah)安娜(Anna)类似/相同,卢卡斯(Lucas)与卢卡(Luca)卢卡斯(Lukas)类似。一旦掌握了每个国家/地区的名称列表,就可以从较低的编辑距离开始聚类。
阿蒙(Amon)2015年

我认为这也与受欢迎程度有关。没有人会用罗马尼亚语拼写Anna,因为double n只是那个语言的怪异。同样,即使您不带h发音,法国人也可能会写基督教。(想要使用
双打

5
实用的方法是使用GUID。
toniedzwiedz 2015年

1
很棒的XKCD参考。但是不要忘记Little Bobby桌子;-) xkcd.com/327
毛格说要恢复莫妮卡(Monica)

我会考虑比较这些语言中的元音。我的德语说
得很

Answers:


15

对于某些语言,有些方法比其他语言更有效。例如,soundex(和我喜欢的另一个描述)是为名称的英语发音设计的。随着soundex,Michael成为M240。这有几个步骤:

  1. 首字母被隔离。(Michael
  2. 所有元音都从余数(Mchl)中删除
  3. 辅音被替换
    • c -> 2
    • l -> 4
  4. 左垫零。

辅音转换的分组是根据他们的语音相似的- ,,B 和所有的地图。FPV1

并且随着时间的流逝会有变化。在家谱中,名称的拼写可能会随时间变化,但发音仍然相似,这在谱系中特别有用。


还有一些方法,例如由航空公司为姓名(而不是美国家谱)开发的比赛评分

匹配评级方法(MRA)的编码为:

  1. 删除所有非主导元音(Michael成为MchlAnthony成为Anthny
  2. 删除任何双精度数的第二个常数
  3. 如果字符串长于6个字符,则通过获取前三个和后三个来将剩余的字符串减少为6个字符。

完整的规范可以在archive.org上找到-注意它“不小”(印刷形式为214页)。

比较具有基于文本多久匹配的阈值。

还有其他语音算法


因此,我鼓励您做的是要么按原样使用Soundex,按原样采用匹配评级方法,要么根据罗马尼亚辅音波兰辅音修改Soundex 。

请记住,同音,辅音的分组(在波兰,mnɲ都鼻辅音进行分组,你可能会组唇,牙齿和肺泡塞音-无论是清音或浊音在一起-理所当然的,我不我会说波兰语,所以不知道我是否只是在说那不是真的话。

然后,只需将数据库中的所有名称隐藏到两个不同的soundex系统中,然后找出在不同语言中冲突最少的名称。这为您提供了不同的名称。因此Smith不会显示为Smyth


但是,这只能解决“可能会与其他名称冲突并被人听到的名称”。它没有解决“正确听到名字,写下错误名字”的另一种方式,为此,应该将注意力集中在通用名称上。

例如,Michael从1950年初到1970年底在美国是一个非常普遍的名字。它确实很受欢迎。但是,由于某种原因,这个名字Micheal在1950年代很流行(在其最鼎盛时期排名第83位)。而且我敢肯定,Micheal经常被命名的人的名字拼写错误。

因此,对于给定的发音,您应该专注于名称占主导地位的名称。在通过一年的姓名另一个数据消费者一眼,你可以看到,开始与果酱的名字......一个男孩是一个烂摊子JamaalJamalJamar和其他人。顺便说一句,这些名称略有不同soundexes对美国J540J540J560-的l,并r在即使它们在语音密切相关的不同的群体)。然而,从,说日本一个人,没有在语音区域只有一个声音在那里lr用美式英语发音。这对于使用soundex的主要辅音也可能构成一个挑战,这是人们应该意识到的(我曾经和一位日本女人打过招呼,称自己为Risa(带有“ R”),而不是Lisa作为她的日语名字的罗马字)。

您会注意到,我的示例适用于美国。该数据易于访问。显然,对于波兰匈牙利而言有些事情,只是暗示了匈牙利名称的通用性……我怀疑在英语之外搜索其他语言可能会有所帮助。

因此,给定了soundex的名称,几乎没有碰撞,并且实际的拼写在碰撞集中。优选地,这是一个通用名称。从匈牙利的清单来看,Krisztián拼写错误可能会同时导致拼写错误Zoltán(2011年匈牙利最常见的婴儿名字排名第22位!)。也就是说,您不会错Michael


2
很棒的答案!我将尝试实现它,一旦完成,我将共享代码并接受您的回答。
user1202136

2
试图实现这个想法。没有完全通过“用户测试”。:) github.com/cristiklein/idemscriptent-given-names
user1202136 2015年

迈克尔的好答案!@ user1202136在脚本方面的出色工作!我有兴趣看到结果:)
克里斯·西里菲斯

1
@ChrisCirefice:尽管Michael的回答真是棒极了,但我发现它没有产生可以通过“用户测试”的名称。我采用了一种更简单的算法,该算法试图在前100个名称列表中查找拼写相同的名称。请在这里找到结果:github.com/cristiklein/idemscriptent-given-names
user1202136

1

您可能想研究Double Metaphone语音算法,该算法旨在处理不同语言中单词的发音方式。还有一个Metaphone 3,但要花钱才能使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.