查找StanfordNLP

时间:2017-02-13 23:40:58

标签: nlp stanford-nlp

我正在尝试解析一些文本以查找对特定项目的所有引用。因此,例如,如果我的项目是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解析器已经完成了我之后的一些事情?我应该以某种方式训练模型吗?

1 个答案:

答案 0 :(得分:1)

我认为你的例子的一个问题是你正在寻找电影片名的引用,并且斯坦福CoreNLP没有支持识别电影片名,书名等...

如果你看一下这个例子:

&#34;乔买了一台笔记本电脑。他很满意。&#34;

您会注意到它连接:

&#34;乔&#34; - &GT; &#34;他&#34;

&#34;笔记本电脑&#34; - &GT; &#34;它&#34;

Coreference是一个活跃的研究领域,即使是最好的系统也只能在一般文本中产生大约60.0的F1,这意味着它经常会出错。