java - 按名称删除属性。过滤网坏了?

标签 java regex weka

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

我在使用正则表达式时遇到问题。

我尝试了几种简单的方法,它们都是有效的(在 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。

更一般地说,我假设您必须在设置 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);

关于java - 按名称删除属性。过滤网坏了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38679743/

相关文章:

javascript - 删除 src 匹配上的动态脚本标记

python - 如何在 python 中将文本格式与没有正则表达式的字符串匹配?

classification - 在 MOA 中使用我的 weka 分类器

classification - 如何在WEKA中读取分类器混淆矩阵

math - 相关系数实际上代表什么

java - 使用 Sax 解析器的 RSS 阅读器丢失标题中的字符

java - Firebase 中的 getValue() 方法是什么?

java - 是否可以将 'see' 对象图用于垃圾回收?

php - 使用正则表达式和 php 从 html 中提取 javascript 对象

java - 在 Java 中分割字符串,但将分隔符保留在每个新字符串中