按名称删除属性。过滤了吗?

时间:2016-07-31 00:31:06

标签: java regex weka

有一个属性过滤器,它应该从一组实例中删除与指定正则表达式匹配的每个属性。

我遇到了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 $&#34 ;

请注意^.*id$是默认表达式。它没有改变。

虽然filterX.getExpression();之前设置了正确的正则表达式。 此过滤器的这种用法也对应于几个代码示例。 如果我使用Filter.setOptions();设置正则表达式,则相同 这是版本3.9.0 dev和3.8 stable的问题。

使用WEKA-GUI,过滤器工作正常。

因此,另一个假设是,如果以编程方式输入,正则表达式必须具有特殊格式..不幸的是,API不提供示例..

1 个答案:

答案 0 :(得分: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);