0

在 weka 中使用 StringToWordVector 过滤器,如何限制单词的长度(例如,只保留包含至少两个字符的单词)?

4

2 回答 2

1

我不确定您是否可以使用标准的 StringToWordVector 来做到这一点。但是您可以实现自己的过滤器。由于您要做的与 StringToWordVector 类所做的没有太大区别,因此您可以继承它并覆盖方法input

这是在文档中的代码中使用过滤器的示例:

  Filter filter = new MyStringToWordVector();
  Instances instances = ..some instances..
  for (int i = 0; i < data.numInstances(); i++) {
    filter.input(data.instance(i));
  }
  filter.batchFinished();
  Instances newData = filter.outputFormat();
  Instance processed;
  while ((processed = filter.output()) != null) {
    newData.add(processed);
  }
  ..do something with newData..

或者,您可以使用 StringToWordVector 代替您的过滤器,但通过以下方式更改上述代码的过滤部分:

StringToWordVector filter = new StringToWordVector();
int attrNum = Integer.parseInt(filter.getAttributeIndices()); 
for (int i = 0; i < data.numInstances(); i++) {
    Instance instance = data.get(i);

    String str = instance.stringValue(attrNum);
    // Apply your logic here
    if (str.length > 2) {
         filter.input(data.instance(i));
    }
}
于 2013-10-22T11:31:43.300 回答
0

看起来使用“RemoveByName”过滤器删除属性可以在应用 StringToWordVector 过滤器后解决问题。此过滤器根据与其名称匹配的正则表达式删除属性。

于 2013-12-12T09:47:56.870 回答