如何使用python删除语料库中的人名

如何使用python删除语料库中的人名,python,Python,我已经搜索了很长一段时间,我找到的大部分材料都是名为recognition的实体。我正在运行主题建模,但在我的数据中,文本中的名称太多了。 有没有包含人名(英文)的python库?或者,如果不是,有什么好方法可以从语料库中的每个文档中删除人名? 下面是一个简单的例子: text=[“梅丽莎的家干净宽敞,我很想很快再去看看。”,“凯文很好,凯文的家有一个很大的停车位。” 我建议使用具有一定识别和区分专有名词能力的标记器。spacy的功能非常广泛,它的默认标记器在这方面做得很好 如果使用一系列的名字

我已经搜索了很长一段时间,我找到的大部分材料都是名为recognition的实体。我正在运行主题建模,但在我的数据中,文本中的名称太多了。
有没有包含人名(英文)的python库?或者,如果不是,有什么好方法可以从语料库中的每个文档中删除人名? 下面是一个简单的例子:

text=[“梅丽莎的家干净宽敞,我很想很快再去看看。”,“凯文很好,凯文的家有一个很大的停车位。”

我建议使用具有一定识别和区分专有名词能力的标记器。spacy的功能非常广泛,它的默认标记器在这方面做得很好

如果使用一系列的名字,就好像它们是停止语,那么会有危险——让我举例说明:

import spacy
import pandas as pd
nlp = spacy.load("en_core_web_sm")
texts=["Melissa's home was clean and spacious. I would love to visit again soon.",
       "Kevin was nice and Kevin's home had a huge parking spaces."
      "Bill sold a work of art to Art and gave him a bill"]
tokenList = []
for i, sentence in enumerate(texts):
    doc = nlp(sentence)
    for token in doc:
        tokenList.append([i, token.text, token.lemma_, token.pos_, token.tag_, token.dep_])
tokenDF = pd.DataFrame(tokenList, columns=["i", "text", "lemma", "POS", "tag", "dep"]).set_index("i")
因此前两句很简单,spacy识别专有名词“PROPN”:

现在,第三句话已经表达了这个问题——很多人的名字也是事物。spacy的默认标记器并不完美,但它在任务的两个方面都做得很好:当名称被用作常规词(例如,商品清单、艺术品)时,不要删除它们,当它们被用作名称时,一定要识别它们。(你可以看到,它把艺术(人物)的一个提法弄乱了


不确定此解决方案是否高效、可靠,但它很容易理解(至少对我来说):

输出:

[' home was clean and spacious. I would love to visit again soon.',
' was nice and  home had a huge parking spaces.']
在此处获得了姓名列表:


我完全赞同@James_SO使用更多智能工具的建议。

18000个名字)记住,你需要以某种方式处理引号。你不能把它们放在你的例子中。
[' home was clean and spacious. I would love to visit again soon.',
' was nice and  home had a huge parking spaces.']