2016-09-30 5 views
1

私はUIMA Rutaでテキストを処理しており、重複した注釈を削除したいと考えています。特定のフィーチャ(名前など)に同じ値が設定されている場合、注釈が重複していると見なします。私は失敗した様々なアプローチを試してみましたが、私は次の例では、私が何をしようとしていますかのアイデアを与えることを願っています:私は交換する場合Rutaルール内の2つの異なるアノテーションのフィーチャを比較するにはどうすればよいですか?

STRING nameVal; 
Person {-> GETFEATURE("name", nameVal)} 
ANY+? 
Person {-> UNMARK(Person)} <- { Person.name == nameVal; }; 

:私もこのバリエーションを試してみました

STRING nameVal; 
Person {-> GETFEATURE("name", nameVal)} 
ANY+? 
Person.name == nameVal {-> UNMARK(Person)}; 

を変数nameValをリテラル(次の例を参照)と組み合わせると、ルールはうまく動作し、私が望むものに近いように見えますが、それほどではありません。

Person 
ANY+? 
Person.name == "Mustermann" {-> UNMARK(Person)}; 

私が考えているのは、比較が評価されるとき、グローバル変数がまだ初期化されていないということです。 Rutaに、最初に一致した注釈の特徴と、同じ規則の中で最後に一致した注釈の特徴を比較する方法はありますか?

答えて

0

はい、問題は、すべての条件が評価された後に完全なルールが一致したときにアクションが実行されることです。フィーチャ値を変数に割り当てるアクションが必要ですが、変数を別のフィーチャと比較するための条件が必要です。しかしながら、ルールをより多く、例えばBLOCKまたはアクションインラインルールで、Rutaにおいてこれを解決する多くの方法がある。最も良い方法はラベル式です。 UIMA Ruta 2.5.0は私たちの生活をもっと楽にしてくれます。あなたがSTRINGLISTを使用する場合は、おそらく速くルールを記述することができます

p1:Person # p2:Person{p1.name == p2.name -> UNMARK(Person)}; 

または

p1:Person # Person.name==p1.name{ -> UNMARK(Person)}; 

:値がリストに含まれている場合は、注釈マークを外し、場合は、このような何かを書くことができますそうでない場合は、値をリストに追加します。

免責事項:私はあなたの迅速な答えをUIMAルタ

+0

感謝の開発者です。実際には、私もそれを試みました。それはUIMA Ruta 2.5.0(私はまだアップグレードしていない)でのみ動作しますか? AEに埋め込まれたRutaを使用する場合、いくつかの設定が必要ですか?私は明日仕事でそれをチェックします。 – Santam

+0

はい、それは 'p1.name'のようなラベル式で機能epxressionsをサポートするUIMA Ruta 2.5.0でのみ動作します。 –

+0

私は今、いくつかのテストを行いましたが、残念ながらそれは機能しませんでした。 Eclipseプラグインを更新した後、「渡された引数は無効です!」というメッセージとともに 'IllegalArgumentException'を取得します。 Ruta Workbenchを使用してテストプロジェクトでRutaを実行しているとき。 Ruta egineが埋め込まれたプロジェクトでは、Ruta 2.4.0でうまく動作するルールのセットがRuta 2.5.0の下で 'RutaParseRuntimeException'を生成します。私はEclipse Mars.2リリース(4.5.2)、Ruta Workbench 2.5.0、UIMAツールとランタイム2.9.0を使用しています。私が知っておくべき問題がありますか? – Santam

関連する問題