2011-12-25 22 views

回答

11

我最近遇到了同樣的問題,寫了一些關於使用OpenNLP 1.5.x工具的博客筆記。整體複製有點密集,所以here's a link with more details


在高層次上,你需要加載適當OpenNLP coreference model libraries,也是WordNet 3.0 dictionary。鑑於這些依賴關係,初始化鏈接器對象非常簡單:

// LinkerMode should be TEST 
//Note: I tried LinkerMode.EVAL before realizing that this was the problem 
Linker _linker = new DefaultLinker("lib/opennlp/coref", LinkerMode.TEST); 

但是,使用鏈接器不太明顯。您需要:

  1. 向下打破內容成句子和相應的令牌
  2. 爲每個句子
  3. 裹一個Parse對象的每個句子解析,從而表明句子排序:

    final DefaultParse parseWrapper = new DefaultParse(parse, idx);
  4. 迭代每個句子解析使用鏈接器從每個解析中獲取Mention對象:

    final Mention[] extents = 
        _linker.getMentionFinder().getMentions(parseWrapper);
  5. 最後,使用鏈接程序在所有提到對象的識別不同實體:

    DiscourseEntity[] entities = _linker.getEntities(arrayOfAllMentions);
+0

能否請你說明我如何做到這一點通過命令行來實現?謝謝。 – Haritz 2014-07-30 11:32:29

+0

在你說的博客中,你使用'getResourceAsStream'加載模型,但最後沒有描述你如何告訴Linker使用'getResourceAsStream'加載模型。你是如何加載模型的? – justhalf 2014-09-11 07:06:10

+0

@justhalf這實際上僅僅是來自博客上一個步驟的複製+粘貼錯誤。 'Linker'直接獲取共享模型的路徑,所以不需要使用'getResourceAsStream'。感謝您的支持! – dpdearing 2014-09-13 03:29:28