2016-11-14 15 views
2

私はRUTAを使用しており、同じエンティティを抽出するための多くの異なるルールを書いています。たとえば、私は "トイレットペーパー工場"を抽出します。現時点で私の規則は、トイレットペーパー工場,製紙工場工場になります。しかし、私は最も長い試合にしか興味がありません。UIMA Ruta最長一致に注釈を付けるだけ

私は、最小限の例を作成しました:

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

そして、私のテスト - 文字列:

lower lower Upper Upper Upper lower Upper 

上記のルールが上位上位アッパーアッパーアッパーと一致します。しかし、この場合、私は最後のルールの結果にのみ興味があります。

短いマッチを削除することはできますか?

答えて

1

追加の一致を避け、追加で作成された注釈を削除するには、いくつかのオプションがあります。

次のようなもので、追加の注釈を削除することができます。このルールは、すべてのテストの注釈をチェックし、そのスパン内の2つのルールを適用し

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}; 

が、これはおそらく、この質問の背後にある考え方ではありません。

免責事項:私はあなたに感謝UIMAルタ

+0

のデベロッパー:) - 最初の解決のために必要な特別なRUTAバージョンはありますか?私は2.3.1を使用しています 2番目の解決策は動作しますが、それは遅いと言いました。 – PascalTurbo

+0

最初の解決策として、UIMA Ruta 2.5.0が必要です。このルールは2.3.1と同様に書き換えることができます。たとえば、BLOCKとUNMARKのタイプを使用します –

関連する問題