【问题标题】:Parsing full names from a list of names从名称列表中解析全名
【发布时间】:2019-04-16 22:33:46
【问题描述】:

我正在使用namesparser 从姓名列表中提取全名。

from namesparser import HumanNames
names = HumanNames('Randy Heimerman, James Durham, Nate Green')
print(names.human_names[0])

Namesparser 在大多数情况下都能正常工作,但上面的例子已经挂了。我相信这是因为名称“Randy”包含“and”,namesparser 将其视为分隔符。

当我将 Randy 的名字移到字符串的末尾时,会打印出正确的名字 (James Durham)。但是,如果我尝试打印其他 2 个名称中的任何一个,则会返回错误的字符串。

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 你能提供你得到的当前输出是什么吗?
  • 所有的全名都是用逗号分隔的吗?另外,您是否考虑过使用命名实体识别管道?斯坦福大学的 CoreNLP 会毫不费力地解析它,然后您只需使用 while 循环来收集具有 person 属性的连续标记...
  • whats HumanNames 我在文档中看不到该课程,只有 HumanName 一次需要一个人,如果您可以提供更多信息,可能已经有一种方法可以做这个在图书馆里
  • 问题在这里 -> github.com/gwu-libraries/namesparser/blob/master/… 你必须更改该行,否则它将继续拆分 and 上的名称

标签: python parsing


【解决方案1】:

我认为您应该使用逗号 , 作为分隔符。

def print_names( name_string ):
    return (name.strip() for name in name_string.split(","))

它的作用是用逗号分割你的字符串,然后去除尾随和前导空格等......在返回名称数组之前。

现在您有了名称生成器,您可以将其传递给其他东西,例如:

humans = [HumanName(name) for name in print_names(name_string)]

但话又说回来,我不知道你的类 HumanNames / HumanName 的真正含义,而且你没有定义类。

如果您正在查看此模块:https://pypi.org/project/nameparser/,其中它需要一个由单数名称组成的字符串,上述方法仍然可以正常工作。

【讨论】:

  • 我不能简单地基于逗号进行拆分,因为像“John Smith, Jr.”这样的名字。 Namesparser 应该考虑到这些情况(事实上,效果很好)。它似乎被这种“和”落在名称本身的场景中绊倒了。
  • 我认为您需要将我指向一个定义“HumanNames”的类,因为 HumanName 只需要 1。我不知道复数版本的约束是什么。可以链接吗?如果我能看到它的实现,我应该能够提供更多帮助
猜你喜欢
  • 2019-05-07
  • 1970-01-01
  • 2017-02-28
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
相关资源
最近更新 更多