如何检查句子的第一个单词是否是专有名词?

时间:2019-02-12 21:14:18

标签: python nlp

我想从一个大型语料库中删除所有专有名词。由于数量庞大,我采取了一种捷径并删除了所有以大写字母开头的单词。对于每个句子的第一个单词,我还想检查它是否是专有名词。不使用标记器怎么办?一种选择是使用一系列常见专有名词进行屏蔽。有没有更好的方法,在哪里可以找到这样的列表?谢谢。

我尝试了NLTK pos_tag和Standford NER。没有上下文,它们将无法正常工作。

 ner_tagger = StanfordNERTagger(model,jar)
 names = ner_tagger.tag(first_words)
 types = ["DATE", "LOCATION", "ORGANIZATION", "PERSON", "TIME"]

 for name, type in names:
     if type in types:
        print(name, type)

以下是一些结果。

  Abnormal ORGANIZATION
  Abnormally ORGANIZATION
  Abraham ORGANIZATION
  Absorption ORGANIZATION
  Abundant ORGANIZATION
  Abusive ORGANIZATION
  Academic ORGANIZATION
  Acadia ORGANIZATION

由于句子的第一个字母总是大写,因此误报过多。在我将所有大写字母改为小写之后,NER甚至错过了美国和美国等常见实体。

2 个答案:

答案 0 :(得分:1)

您可以从语料库中列出不在句子开头的首字母大写的单词。布隆过滤器是存储结果的一种有效方法,因为您愿意容忍误报。

答案 1 :(得分:0)

如果您只是在玩游戏,则可以使用Google的自然语言API。它们提供了一个“实体分析”,其中实体分为两类,“专有名词”(特定的人或地方)提示:-)或“常用名词”。

我只是建议将此作为起点。有一个门槛,您可以免费免费使用该API。我认为每月大约有5,000个“实体”?

免责声明:我与Google没有商业关系,也没有亲自使用过该API。我参与了其他语言解析项目,并认为这听起来很有趣。