2017-02-13 58 views
0

我正在嘗試解析某些文本以查找對特定項目的所有引用。因此,例如,如果我的項目是The Bridge on the River Kwai,並且我將該文本傳遞給它,我希望它找到所有我以粗體顯示的實例。在StanfordNLP中查找對提供的名詞的所有引用

上桂河大橋是由大衛執導1957年英美戰爭史詩電影 精益和主演威廉·霍爾登,傑克·霍金斯,亞歷克·吉尼斯 和早川雪洲。 電影是一部小說,但 借鑑了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的第一件事情 - 我是否完全錯誤地進行了這種研究?有沒有一個斯坦福NLP解析器,已經可以做一些我所追求的?我應該以某種方式訓練模型嗎?

+0

我應該在這裏指出,「這不可能輕易完成」將被接受爲一個有效的答案,如果這就是答案。 :) –

回答

1

我想你的榜樣的一個問題是,你正在尋找的電影標題引用,而且在斯坦福CoreNLP不支持識別電影標題,書名,等等

如果您看看這個例子:

「喬買了一臺筆記本電腦,他很滿意。」

你會發現,它連接:

「喬」 - > 「他」

「一臺筆記本電腦」 - > 「它」

共指是一個活躍的研究面積甚至是最好的系統只能在一般文字上產生大約60.0的F1,這意味着它經常會產生錯誤。

+0

非常感謝!有什麼方法可以訓練它識別這一個冠軍嗎?我不介意它是否承認它是一個人或某物。 –

相關問題