2016-07-31 6 views
0

指定された正規表現に一致する各属性をインスタンスのセットから削除する属性フィルタがあります。名前で属性を削除します。フィルターが壊れましたか

RegExに問題があります。

私はいくつか単純なものを試してみましたが、どれも有効です(regexrでテストされています)。 しかし、フィルタはそれらを受け入れていないようです。

関連するコードに従います。

Instances dataset1_x=new Instances(dataset1); 

RemoveByName filterX=new RemoveByName(); 
filterX.setInputFormat(dataset1_x); 
filterX.setInvertSelection(true); 
filterX.setExpression(Pattern.quote("^.*i$")); 
//filterX.setExpression("^.*i$"); also don't work 
Instances dataset1_=Filter.useFilter(dataset1_x,filterX); 

"i"で終わるすべての名前と一致する必要があります。

結果のデータセットは

「データセット-weka.filters.unsupervised.attribute.StringToNominal-RLAST-weka.filters.unsupervised.attribute.Remove-weka.filters.unsupervised.attribute.RemoveByName-命名されましたE ^。* id $ "

デフォルトの式は^.*id$です。それは変更されていません。

filterX.getExpression();では、前に正しい正規表現が設定されていますが、 このフィルタの使用法は、いくつかのコード例に対応しています。 正規表現を設定しても同じですFilter.setOptions(); これはバージョン3.9.0のデベロッパーで3.8の安定版の問題です。

WEKA-GUIを使用すると、フィルタが正しく動作しています。

したがって、別の仮定はプログラムで入力した場合、正規表現は...残念ながら、APIは、例を提供していない特殊な形式を持たなければならないということです。..

+1

どのように正確には受け入れられませんか?また、 'i $'は正規表現の適切な(そしてより速い)バージョンでしょうか? – RamenChef

+0

ありがとうございますが、あなたの正規表現は接尾辞 'i'にのみ一致しますか?私はそれをテストします。その名前は正規表現と一致しますが、属性をフィルタリングしていないためです。 – Jan

答えて

1

あなたは入力を設定する前に表現し、InvertSelection-フラグを設定する必要がありますフォーマット。

さらに一般的には、inputFormatを設定する前にすべてのオプションを設定する必要があると仮定します。

次のように動作しています。

Instances dataset1_x=new Instances(dataset1); 
RemoveByName filterX=new RemoveByName(); 
filterX.setInvertSelection(true); 
filterX.setExpression(Pattern.quote("^.*i$")); 
filterX.setInputFormat(dataset1_x); 
Instances dataset1_=Filter.useFilter(dataset1_x,filterX); 
関連する問題