使用Python比较不同格式的名称

时间:2019-05-13 15:04:24

标签: python-3.x string comparison

我想比较不同格式的名称,例如:“乔治·W·布什”,“乔治·布什”,“乔治·沃克·布什”,“布什,乔治·沃克”,“布什,GW”,“布什,乔治”等。带点(“。”)的也很少,但我从列表中省略了它们,因为无论如何我都将其标准化。实际上,逗号(“,”)也将被剥离。

确定两个给定名称是否实际代表同一个人的最佳方法是什么?我曾考虑过使用nameparser并构建比较算法,但是请提供其他可能的选择。使用Python标准模块的任何方法也都可以。

2 个答案:

答案 0 :(得分:1)

最准确的方法是使用NLP库,例如spacy。它可以让您计算单词之间的相似度。

如果您想要一种更简单的方法,则可以实现一个简单的算法,例如:

Object.defineProperty(Array.prototype, 'first', {
  value() {
    return this.find(() => true);
  }
});

console.log( ['a', 'b', 'c'].first() );

然后测量两个结果字符串之间的差异...

但这显然不会给出绝对结果。

答案 1 :(得分:1)

有一个开放源代码库,该库很有用,或者至少可以用作构建更多功能的基础。

  

https://github.com/rliebz/whoswho

样品用量:

>>> from whoswho import who
>>> who.match('Bush, G.W.', 'George W. Bush')