首先,我要说我是NLP的新手。虽然,如您所读,这可能会变得非常明显。
我正在解析Wikipedia页面以查找页面标题的所有提及内容。我通过查看CorefChainAnnotations来找到“适当的”提及-然后,我认为最常见的提及是在谈论页面标题。我通过运行以下命令来做到这一点:
Properties props = new Properties();
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,parse,coref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
String content = "Abraham Lincoln was an American politician and lawyer who served as the 16th President of the United States from March 1861 until his assassination in April 1865. Lincoln led the United States through its Civil War—its bloodiest war and perhaps its greatest moral, constitutional, and political crisis.";
Annotation document = new Annotation(content);
pipeline.annotate(document);
for (CorefChain cc : document.get(CorefCoreAnnotations.CorefChainAnnotation.class).values()) {
List<CorefChain.CorefMention> corefMentions = cc.getMentionsInTextualOrder();
for (CorefChain.CorefMention cm : corefMentions) {
if (cm.mentionType == Dictionaries.MentionType.PROPER) {
log("Proper ref using " + cm.mentionSpan + ", " + cm.mentionType);
}
}
}
返回:
Proper ref using the United States
Proper ref using the United States
Proper ref using Abraham Lincoln
Proper ref using Lincoln
我已经知道“亚伯拉罕·林肯”绝对是我要找的东西,我可以推测,因为“林肯”也出现了很多,那么那肯定是另一种谈论主要主题的方式。 (我现在意识到,最常见的命名实体是“美国”,但是一旦将其整个页面都输入完了,它就可以正常工作)。
直到出现类似“乱世佳人”的页面之前,此方法都有效。如果我更改代码以使用该代码:
String content = "Gone with the Wind has been criticized as historical revisionism glorifying slavery, but nevertheless, it has been credited for triggering changes to the way African-Americans are depicted cinematically.";
那么我就没有适当的提及。我怀疑这是因为标题中的所有单词都没有被识别为命名实体。
有什么方法可以使斯坦福大学NLP识别“飘”已经是一个已知的命名实体?从互联网上看,似乎需要训练一个模型,但是我希望这只是一次运行而成为一个已知的命名实体,并且我不希望模型以后记住该训练。
我可以想象NLP专家会注视这种方法的糟糕之处,但是它会变得更好!我想到了将页面标题的任何出现都更改为“ Thingamijig”的好主意,然后再将文本传递给Stanford NLP,这对“飘”效果很好,但对“亚伯拉罕·林肯”却失败了,因为(我认为) NER不再在核心功能中将“林肯”与“ Thingamijig”相关联。
在我的梦想世界中,我会做以下事情:
pipeline.addKnownNamedEntity("Gone with the Wind");
但这似乎不是我可以做的,而且我不确定如何去做。
最佳答案
您可以提交包含所需短语的字典,并将其识别为命名实体。
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -ner.additional.regexner.mapping additional.rules -file example.txt -outputFormat text
附加规则
Gone With The Wind MOVIE MISC 1
请注意,以上各列应以制表符分隔。
additional.rules
文件中的行数可以任意设置。一个警告,每次出现令牌模式都会被标记。
此处有更多详细信息:https://stanfordnlp.github.io/CoreNLP/ner.html