我正在尝试编写自己的规则,在我的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());
在输出中它只提供令牌,空格令牌 任何人都可以帮助我解决这个问题吗?
答案 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");