2013-10-22 181 views

回答

1

我不確定你是否可以用標準的StringToWordVector來做到這一點。但是你可以實現你自己的過濾器。既然你要做的和StringToWordVector類沒什麼不同,你可以繼承它並覆蓋方法input

這裏是在代碼中使用過濾器從documentation的一個示例:

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)); 
    } 
} 
0

看起來像刪除屬性使用「RemoveByName」過濾器可以在應用StringToWordVector過濾器後執行。該過濾器根據與其名稱匹配的正則表達式來刪除屬性。