2011-12-25 51 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