【问题标题】:How to intelligently parse last name如何智能解析姓氏
【发布时间】:2011-11-05 07:23:09
【问题描述】:

假设FirstName MiddleName(s) LastName的西方命名约定,

从全名中正确解析出姓氏的最佳方法是什么?

例如:

John Smith --> 'Smith'
John Maxwell Smith --> 'Smith'
John Smith Jr --> 'Smith Jr'
John van Damme --> 'van Damme'
John Smith, IV --> 'Smith, IV'
John Mark Del La Hoya --> 'Del La Hoya'

...以及由此而来的无数其他排列。

【问题讨论】:

  • 找人来做。
  • 这就是目前正在做的事情。
  • 这看起来像是一个很好的机器学习问题——关键是你必须做好犯错的准备,但希望成功率提高。
  • 你说的是“西方”,但你并不是这个意思。西班牙名字有父名,然后是母名等。You actually cannot do this.,即使是你所谓的西方名字。它只是行不通。
  • 我不同意你不能这样做的说法。你可以,但它不会是完美的。唯一的问题是,根据您的领域,您将获得更高或更低的识别精度/召回率。在技​​术层面:有很多可能性。例如,您可以使用机器学习根据数据集中的示例来了解名称的外观。

标签: python regex parsing nlp


【解决方案1】:

这里最好的答案可能是不要尝试。名字是个人的和特殊的,即使将自己限制在西方传统中,你也永远不能确定你会想到所有的极端情况。我的一个朋友合法地把他的名字改成了一个单词,他和各种程序无法处理的机构打交道,他度过了一段地狱般的时光。您处于创建执行程序的软件的独特位置,因此您有机会设计一些不会惹恼具有非传统名称的人的废话。想想为什么你需要解析姓氏开头,看看是否还有其他可以做的事情。

话虽如此,作为纯粹的技术问题,最好的方法可能是专门修剪字符串“Jr”、“, Jr”、“, Jr.”、“III”、“, III”等。从包含名称的字符串的末尾开始,然后获取从字符串中的最后一个空格到(新的,在删除 Jr 后等)结尾的所有内容。这不会从你的例子中得到,比如说,“Del La Hoya”,但你甚至不能真正指望一个人来得到那个 - 我在做一个有根据的猜测,John Mark Del La Hoya 的姓氏是“Del La Hoya”而不是“Mark Del La Hoya”,因为我是母语为英语的人,而且我对西班牙姓氏的样子有一些直觉 - 如果名字是,说“Gauthip Yeidze Ka Illunyepsi”,我完全不知道是否是否将 Ka 算作姓氏的一部分,因为我不知道那是什么语言。

【讨论】:

    【解决方案2】:

    遇到了一个名为“nameparser”的库 https://pypi.python.org/pypi/nameparser 它处理上述六种情况中的四种:

    #!/usr/bin/env python
    from nameparser import HumanName
    
    def get_lname(somename):
        name = HumanName(somename)
        return name.last
    
    people_names = [
        ('John Smith', 'Smith'),
        ('John Maxwell Smith', 'Smith'),
        # ('John Smith Jr', 'Smith Jr'),
        ('John van Damme', 'van Damme'),
        # ('John Smith, IV', 'Smith, IV'),
        ('John Mark Del La Hoya', 'Del La Hoya')
    ]
    
    for name, target in people_names:
        print('{} --> {} <-- {}'.format(name, get_lname(name), target))
        assert get_lname(name) == target    
    

    【讨论】:

      【解决方案3】:

      我在这里借调 Tnekutippa,但您应该查看named entity recognition。它可能有助于自动化某些过程。然而,如前所述,这是相当困难的。我不太确定斯坦福 NER 是否可以开箱即用地提取名字和姓氏,但机器学习方法可能对这项任务非常有用。斯坦福 NER 可能是一个不错的起点,或者您可以尝试制作自己的分类器和训练语料库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多