我有一份公司的名单,但有些公司只是人名而已。我想把这些人从名单上除名,但我很难找到一种方法来识别这些公司的人的名字。在
通过网上调查,我尝试了两种方法。第一种方法是使用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
,和{
这不起作用,因为它将所有东西都标记为专有名词。然后我把所有的东西都小写,并且只使用.title()
将每个单词的第一个字母大写,但是由于类似的原因,这也失败了。在
我尝试的另一种方法是使用Human Name Parser
模块,但这也不起作用,因为它将公司名称标记为此人的名字和姓氏。在
我有没有办法区分上面的人名和公司名?在
我不相信你完全可以用程序来完成,所以需要一些手动操作。但是,您可以使用
itertools.groupby
使事情变得简单一些正如一些评论中所指出的,公司可能包含某些关键字,因此我们可以创建这些关键字的列表以供使用:
从这里,我们可以根据一个项目是否包含其中一个关键字对列表进行排序(这是分组所必需的):
^{pr2}$在您的示例中,将列出
从这里,我们可以将可能而不是公司(那些不包含任何关键字的)和肯定是公司的(那些确实包含关键字的)进行分组:
所以我们现在有两组人:
然后,可以手动对假组进行排序并删除公司,或者应用其他类似的筛选方法来进一步改进匹配。要应用的其他筛选器:
"MR", "MS", "MRS", "PHD", "DR"
的东西都很可能是一个人"multiple_letters<space>single_letter<space>multiple_letters"
的单词可能是名称,可以使用re
进行匹配据我所知,你需要区分公司和人名。我猜您列表中的公司要么以LLC,INC结尾,要么包含一个-(连字符),因此我将这些单词
company_set
作为{'LLC', 'INC', '-'}
,然后通过基函数split()
将其拆分为代币。如果company_set
和拆分标记的交集有任何共同点,那么它将不是空集,因此公司消息被打印,否则将打印人类的消息。代码如下:输出如下:
^{pr2}$测试list元素中公司名称的指示符。对于您的列表,这是INC,LLC,和连字符(可以是一个人的名字的一部分)。或公司名称的一部分(实验室、制药、解决方案等)。可能还有其他标准(音节、语音)。 否则,你需要一个名字或公司的字典来测试。在
给予
^{pr2}$相关问题 更多 >
编程相关推荐