我正在尝试解析一些文本以查找对特定项目的所有引用。因此,例如,如果我的项目是The Bridge on the River Kwai
并且我将此文本传递给它,我希望它能找到我用粗体显示的所有实例。
桂河大桥是一部1957年英美史诗般的战争片 由David Lean执导并由William Holden,Jack Hawkins,Alec主演 吉尼斯和Sessue Hayakawa。 电影是一部虚构的作品,但是 借用1942年至1943年的缅甸铁路建设 历史背景。 电影是在锡兰(现斯里兰卡)拍摄的。 影片中的桥梁位于Kitulgala附近。
到目前为止,我的尝试是通过附加到每个CorefChain的所有提及并循环搜索我的目标字符串。如果我找到目标字符串,我会添加整个CorefChain,因为我认为这意味着CorefChain中的其他项目也引用相同的东西。
List<CorefChain> gotRefs = new ArrayList<CorefChain>();
String pQuery = "The Bridge on the River Kwai";
for (CorefChain cc : document.get(CorefCoreAnnotations.CorefChainAnnotation.class).values()) {
List<CorefChain.CorefMention> corefMentions = cc.getMentionsInTextualOrder();
boolean addedChain = false;
for (CorefChain.CorefMention cm : corefMentions) {
if ((!addedChain) &&
(pQuery.equals(cm.mentionSpan))) {
gotRefs.add(cc);
addedChain = true;
}
}
}
然后我遍历第二个CorefChains列表,重新检索每个链的提及并逐步完成它们。在那个循环中,我会在一个句子中显示哪些句子可能会提到我的项目。
for (CorefChain gr : gotRefs) {
List<CorefChain.CorefMention> corefMentionsUsing = gr.getMentionsInTextualOrder();
for (CorefChain.CorefMention cm : corefMentionsUsing) {
//System.out.println("Got reference to " + cm.mentionSpan + " in sentence #" + cm.sentNum);
}
}
它找到了我的一些参考文献,但没有那么多,它产生了很多误报。完全可以从阅读本文中看出,我真的不知道关于NLP的第一件事 - 我是否完全以错误的方式解决这个问题?是否有一个StanfordNLP解析器已经完成了我之后的一些事情?我应该以某种方式训练模型吗?
答案 0 :(得分:1)
我认为你的例子的一个问题是你正在寻找电影片名的引用,并且斯坦福CoreNLP没有支持识别电影片名,书名等...
如果你看一下这个例子:
&#34;乔买了一台笔记本电脑。他很满意。&#34;
您会注意到它连接:
&#34;乔&#34; - &GT; &#34;他&#34;
和
&#34;笔记本电脑&#34; - &GT; &#34;它&#34;
Coreference是一个活跃的研究领域,即使是最好的系统也只能在一般文本中产生大约60.0的F1,这意味着它经常会出错。