按名称删除属性。过滤器坏了?
Remove Attributes by Name. Filter broken?
有一个属性过滤器,它应该从一组实例中删除与指定正则表达式匹配的每个属性。
我的 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" 结尾的名称。
生成的数据集命名为
"dataset-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 没有提供示例。
在设置输入格式之前,您需要设置表达式和InvertSelection-flag。
更一般地说,我假设您必须在设置输入格式之前设置所有选项。
以下有效。
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);
有一个属性过滤器,它应该从一组实例中删除与指定正则表达式匹配的每个属性。
我的 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" 结尾的名称。
生成的数据集命名为
"dataset-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 没有提供示例。
在设置输入格式之前,您需要设置表达式和InvertSelection-flag。
更一般地说,我假设您必须在设置输入格式之前设置所有选项。
以下有效。
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);