我想从一个大型语料库中删除所有专有名词。由于数量庞大,我采取了一种捷径并删除了所有以大写字母开头的单词。对于每个句子的第一个单词,我还想检查它是否是专有名词。不使用标记器怎么办?一种选择是使用一系列常见专有名词进行屏蔽。有没有更好的方法,在哪里可以找到这样的列表?谢谢。
我尝试了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甚至错过了美国和美国等常见实体。
答案 0 :(得分:1)
您可以从语料库中列出不在句子开头的首字母大写的单词。布隆过滤器是存储结果的一种有效方法,因为您愿意容忍误报。
答案 1 :(得分:0)
如果您只是在玩游戏,则可以使用Google的自然语言API。它们提供了一个“实体分析”,其中实体分为两类,“专有名词”(特定的人或地方)提示:-)或“常用名词”。
我只是建议将此作为起点。有一个门槛,您可以免费免费使用该API。我认为每月大约有5,000个“实体”?
免责声明:我与Google没有商业关系,也没有亲自使用过该API。我参与了其他语言解析项目,并认为这听起来很有趣。