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

4
我想从一个大语料库中移除所有专有名词。由于数量庞大,我采取了一种简便的方法,即移除所有以大写字母开头的单词。对于每个句子的第一个单词,我还想检查它是否是专有名词。如何在不使用标注器的情况下完成这项工作?其中一个选项是使用常见专有名词列表进行筛选。是否有更好的方法,并且我可以在哪里获取这样的列表?谢谢。
我尝试过 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

由于句子的第一个字母总是大写,因此会有太多的误报。当我将单词改为全部小写后,命名实体识别甚至错过了常见的实体,如美国和美国人。

2个回答

1
您可以从语料库中列出那些在句子开头以外大写的单词。由于您愿意容忍假阳性,布隆过滤器是存储结果的有效方法。请保留 HTML 标签。

0

如果你只是在玩,你可以尝试一下谷歌的自然语言API。他们提供了一个“实体分析”,其中实体分为两类,“专有名词”(特定的人或地点)提示提示 :-) 或“普通名词”。

我只是建议这作为一个起点。在某个阈值以下,你可以免费使用API。我想大约是每月5000个“实体”?

免责声明:我与谷歌没有商业关系,也没有使用过API。我曾经从事其他语言解析项目,并认为这听起来很有趣。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接