日付の周りにタイムアノテーションを作成するRutaルールをいくつか記述しようとしています。下のテストは、私がそれをやろうとしているところを示しています。空のアクションによって '実行可能な代替が見つかりませんでした'
@Test
public void test__Ruta__AnnotateDate() throws UIMAException, IOException, URISyntaxException {
final class RulesRunner {
public void applyRules(JCas cas, String[] rules) throws AnalysisEngineProcessException, InvalidXMLException, ResourceInitializationException, ResourceConfigurationException, IOException, URISyntaxException {
for (String aRule: rules) {
Ruta.apply(cas.getCas(), aRule);
}
}
}
RulesRunner runner = new RulesRunner();
JCas cas = JCasFactory.createJCas();
cas.setDocumentText("Today's date is 2017-04-06.");
// Tokenize the string
String[] rules = new String[] {
"ANY{REGEXP(\"[a-zA-Z0-9]+\") -> Token};",
"ANY{REGEXP(\"[^ a-zA-Z0-9]+\") -> Token};"
};
runner.applyRules(cas, rules);
rules = new String[] {
// Does not crash, but gives:
// Got Time=2017-04-06
// Got Time=-
// Got Time=04
// Got Time=-
// Got Time=06
//
"Token{REGEXP(\"[0-9]{4}\") -> MARK(Time, 1, 5)} Token{REGEXP(\"-\") -> Time} Token{REGEXP(\"[0-9]{2}\") -> Time} Token{REGEXP(\"-\") -> Time} Token{REGEXP(\"[0-9]{2}\") -> Time};"
// Crashes with exception
//
// org.apache.uima.ruta.extensions.RutaParseRuntimeException:
// Error in Ruta7969125931572676994, line 1, "}": found no viable alternative
//
// "Token{REGEXP(\"[0-9]{4}\") -> MARK(Time, 1, 5)} Token{REGEXP(\"-\") -> } Token{REGEXP(\"[0-9]{2}\") -> } Token{REGEXP(\"-\") -> } Token{REGEXP(\"[0-9]{2}\") -> };"
};
runner.applyRules(cas, rules);
for (Time aTime: JCasUtil.select(cas, Time.class)) {
System.out.println("Got Time="+aTime.getCoveredText());
}
}
テストは最初、フォームのトークンの任意の配列アラウンドタイム注釈を入れしようとし、トークンを注釈[「YYYY」、「 - 」、「M」、「 - 」、「DD」] 。
私はこれを行うために2つのルールを試しました。時間注釈が実際にトークンの全シーケンスの周りに置かれるという意味での第一のルール「作品の並べ替え」。しかし、日付の各構成要素の周りにタイムアノテーションを追加します(YYYY部分を除く)。
第2のルールでは、他のトークンとの一致の結果として空のアクションを使用しようとしましたが、これは '実行可能な代替手段が見つかりません'という例外を引き起こします。ルタで空の行動が許可されていませんか?そうでない場合は、日付トークンのシーケンスの周りに単一の注釈を配置する方法はありますか?
Thx。