사물 간의 'is-a'관계를 포착하기위한 루타 규칙을 작성하려고합니다. 관계에 관련된 두 가지를 가리키는 entity1 및 entity2 특성을 포함하는 Relation 클래스가 있습니다.Ruta로 선언 된 변수를 사용할 수 없습니다. DECLARE
필자는이 두 요소에 선언 된 주석을 "캡처해야"하므로 나중에 주석을 관계 주석의 특성으로 설정할 수 있다는 점을 이해합니다.
그래서 내 규칙이있다 : 어떻게 든
DECLARE Token Thing1;
DECLARE Token Thing2;
하지만를, 내가 Thing1 또는 Thing2 것으로 토큰을 표시 할 때, 루타는 해당 유형에 액세스 할 수 있음을 알려줍니다.
DECLARE Thing1;
DECLARE Thing2;
및
DECLARE Thing1 Token;
DECLARE Thing2 Token;
및
: 여기 문제를 내가 대신 다음과 같은 선언과 노력@Test
public void test__Ruta__BUG__DeclareNotWorking() 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("A cat is a kind of mammal.");
// 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);
// Capture the "is-a" relation between 'cat' and 'mammal' and 'car' and 'vehicle'
rules = new String[] {
"DECLARE Token Thing1; \n" +
"DECLARE Token Thing2; \n" +
// This results in: 'not able to resolve type: Thing1'
"Token{ -> MARK(Thing1)} " +
"Token{REGEXP(\"is\") -> RutaNevermind} " +
"Token{REGEXP(\"a\") -> RutaNevermind} " +
"Token{REGEXP(\"kind\") -> RutaNevermind} " +
"Token{REGEXP(\"of\") -> RutaNevermind} " +
"Token{ -> MARK(Relation, 1, 6)} " +
";"
};
runner.applyRules(cas, rules);
for (Relation aRelation: JCasUtil.select(cas, Relation.class)) {
System.out.println("Got Relation="+aRelation.getCoveredText());
}
}
주를 설명하는 테스트입니다3210
작업의 개발자입니다. 간단히 생략 할 수는 있지만'->'을 제거해야한다. –