【发布时间】:2016-08-03 00:25:21
【问题描述】:
我有一份公司名单,但其中一些公司只是人名。我想从列表中删除这些人,但我很难找到一种方法来识别公司中的人员姓名。
通过在线研究,我尝试了两种方法。第一个是使用nltk。我的代码看起来像
y = ['INOVATIA LABORATORIES LLC', 'PRULLAGE PHD JOSEPH B', 'S J SMITH CO INC', 'TEVA PHARMACEUTICALS USA INC', 'KENT NUTRITION GROUP INC', 'JOSEPH D WAGENKNECHT', 'ROBERTSON KEITH', 'LINCARE INC', 'AGCHOICE - BLUE MOUND']
在上面的列表中,我想删除 PRULLAGE PHD JOSEPH B、JOSEPH D WAGENKNECHT 和 ROBERTSON KEITH。
z = []
for company in y:
tokens = nltk.tokenize.word_tokenize(company)
z.append(nltk.pos_tag(tokens))
这不起作用,因为它将所有内容标记为专有名词。然后我将所有内容都小写,并且只使用.title() 将每个单词的第一个字母大写,但这也因类似原因而失败。
我尝试的另一种方法是使用Human Name Parser 模块,但这也不起作用,因为它将公司名称标记为个人的名字和姓氏。
有什么方法可以区分上面的人名和公司名吗?
【问题讨论】:
-
这是一个列表吗?如果是这样,您缺少一些逗号,并且您的引号不合时宜
-
听起来更像是一个机器学习问题。您如何期望 NLTK 知道“公司”的定义?您必须告诉它(INC、LLC、CO、GROUP)都是关键字
-
我的错,我把它列在了正确的列表中。
-
这永远不会 100% 处理随机数据。有些公司名称与人名无法区分。例如,我最近从一家名为“Tori Richards”的公司购买了一件衬衫。给定名称“Alice Marina”,是姓氏为“Marina”的“Alice”人的名字,还是提供存放您的船的地方的名为“Alice Marina”的企业?
-
3 年后,这些答案都没有一点意义?好吧,我发现它们很有用,所以我给了它们一个。