人名比较:接近此任务的方法

Ber*_*ala 3 language-agnostic nlp

我不是自然语言编程学生,但我知道这不是简单的strcmp(n1,n2).

这是我到目前为止所学到的:

  • 比较个人姓名无法100%解决
  • 有一些方法可以达到一定程度的准确性.
  • 答案将是特定于语言环境的,没关系.

我不是在寻找拼写替代品!假设输入的拼写是正确的.

例如,下面的所有名称都可以指同一个人:

  • 贝瑞·塔卡拉
  • 伯纳德·察卡拉
  • Berry J. Tsakala
  • Tsakala,Berry

我试着:

  1. 构建(或复制)一种算法,该算法对关系2输入名称进行分级
  2. 找到一个索引方法(对于我的数据库中的名称,哈希表等)

注意:我的任务不是在文本中查找名称,而是比较2个名称.例如

name_compare( "James Brown", "Brown, James", "en-US" ) ---> 99.0%
Run Code Online (Sandbox Code Playgroud)

Nic*_*kis 7

我使用Tanimoto Coefficient在Python中快速(但不是超级)解决方案:

"""
Formula:
  Na = number of set A elements
  Nb = number of set B elements
  Nc = number of common items

  T = Nc / (Na + Nb - Nc)
"""
def tanimoto(a, b):
    c = [v for v in a if v in b]
    return float(len(c)) / (len(a)+len(b)-len(c))

def name_compare(name1, name2):
    return tanimoto(name1, name2)


>>> name_compare("James Brown", "Brown, James")
0.91666666666666663
>>> name_compare("Berry Tsakala", "Bernard Tsakala")
0.75
>>> 
Run Code Online (Sandbox Code Playgroud)

编辑: 指向优秀且有用的书籍的链接.