2016-11-14 3 views
2

나는 RUTA를 사용하고 있으며 동일한 엔티티를 추출하기 위해 여러 가지 규칙을 많이 작성했습니다. 예를 들어, "화장지 공장"을 추출합니다. 지금 내 규칙은 화장지 공장, 공장으로 귀착됩니다. 그러나 나는 가장 긴 시합에만 관심이 있습니다.UIMA Ruta 가장 긴 일치어에만 주석 달기

나는 최소한의 예를 만들었습니다

DECLARE Test; 
(CW CW) {-> CREATE(Test)}; 
(CW CW CW) {-> CREATE(Test)}; 

그리고 내 테스트 문자열 :

lower lower Upper Upper Upper lower Upper 

규칙은 위의 어퍼 어퍼어퍼 어퍼 어퍼 일치합니다. 그러나이 경우 나는 마지막 규칙의 결과에만 관심이 있습니다.

더 짧은 성냥을 제거 할 수 있습니까?

답변

1

추가 일치를 피하고 추가로 작성된 주석을 제거하는 몇 가지 옵션이 있습니다.

당신은 같은과 추가 주석을 제거 할 수있는 모든 테스트 주석

Test->{ANY t:@Test{-> UNMARK(t)};t:@Test{-> UNMARK(t)} ANY;}; 

이 규칙 확인하고 그 범위 내에서이 개 규칙을 적용합니다. 각 규칙은 앞에 또는 뒤에 오는 Test 주석을 검색합니다. 즉, 첫 번째 규칙보다 작은 의미입니다. 일치하면 주석이 제거됩니다.

거기 PARTOFNEQ 조건도하지만, 오히려 느린 : 당신이 주석의 생성을 방지하려면

Test{PARTOFNEQ(Test)->UNMARK(Test)}; 

, 당신은 규칙의 순서를 변경하고보다 구체적인 하나를 적용해야 먼저. 일치하는 프로세스는 여러 가지 방법으로 변경할 수 있습니다 (예 : PARTOF 조건, MARKONCE 작업 또는 GREEDYANCHORING 설정).

예 : 당신에

(CW{-PARTOF(Test)} CW CW) {-> CREATE(Test)}; 
(CW{-PARTOF(Test)} CW) {-> CREATE(Test)}; 

예는 물론 같은 것을 할 수있는 :

CW[2,3]{-PARTOF(Test)-> Test}; 

는하지만 아마이 질문 뒤에 생각이 아니다.

면책 조항 : 나는

+0

이 :) 감사 UIMA 루타의 개발자입니다 - 최초의 솔루션에 필요한 특별한 루타 버전이 있습니까? 나는 2.3.1을 사용하고있다 두 번째 해결책은 효과가있다. – PascalTurbo

+0

첫 번째 해결 방법은 UIMA Ruta 2.5.0이 필요합니다. 2.3.1에 대해서도이 규칙을 다시 작성할 수 있습니다 (예 : 블록 및 UNMARK의 유형 사용). –