在java(门)中嵌入jape规则

时间:2014-03-10 06:06:59

标签: java nlp information-extraction gate

我正在尝试编写自己的规则,在我的java代码中注释作者(来自作者,jape)我已经初始化了我的新处理资源。代码运行正常,但没有注释ma文本: 输入:谁是xyz的作者 输出:它应该被注释为作者并且shd在一些临时变量中保存书名。 我的java代码:

    Gate.init();
Gate.getCreoleRegister().registerDirectories(
           new File(Gate.getPluginsHome(), "ANNIE").toURI().toURL());
SerialAnalyserController pipeline =
          (SerialAnalyserController)gate.Factory.createResource(
             "gate.creole.SerialAnalyserController");
LanguageAnalyser tokeniser = (LanguageAnalyser)gate.Factory.createResource(
             "gate.creole.tokeniser.DefaultTokeniser");
LanguageAnalyser jape = (LanguageAnalyser)gate.Factory.createResource(
          "gate.creole.Transducer", gate.Utils.featureMap(
              "grammarURL", new File("E:\\GATE_Developer_7.1\\plugins\\ANNIE\\resources\\NE\\Author.jape").toURI().toURL(),
              "encoding", "UTF-8"));
pipeline.add(tokeniser);
pipeline.add(jape);
Corpus corpus = gate.Factory.newCorpus(null);
Document doc = gate.Factory.newDocument("Who is author of Inception");
DocumentContent dc=doc.getContent();        
corpus.add(doc);
pipeline.setCorpus(corpus);
pipeline.execute();
System.out.println("Found annotations of the following types: " +
          doc.getAnnotations().getAllTypes());

在输出中它只提供令牌,空格令牌 任何人都可以帮助我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

问题在于您的JAPE语法,而不是Java代码。您的Java代码可以正常使用以下JAPE语法:

Phase: Test1 Input: Token Options: control = appelt Rule: testRule ( {Token.kind == "word"} {Token.kind == "word"}):annotate --> :annotate.TwoWords = { string = :annotate.Token.string }

输出是:

Found annotations of the following types: [SpaceToken, TwoWords, Token]

如果您提供JAPE语法,我会详细说明您的问题。

或者你可以在GATE Developer中使用你的JAPE语法,直到它开始匹配你想要的。在此之后,您的Java程序将正常工作。

答案 1 :(得分:1)

在这里,您给予注释的名称,您可以使用它。 所以,你可以使用这种方法。

doc.getAnnotations().get("Name of the annotations which you want to get");