2017-05-28 44 views
0

我使用Weka的JAVA API根據不同的文本特徵對文檔進行分類。當使用TextDirectoryLoader類時,我可以加載一個包含某些文本的txt文件的目錄,將文本轉換爲數字特徵並在以後對實例進行分類。問題在於,該文本將由數據集中的單個字符串要素表示。如何在weka TextDirectoryLoader中加載單獨的文本屬性?

例如:

TextDirectoryLoader loader = new TextDirectoryLoader(); 
loader.setDirectory(new File(dataDir)); 

Instances dataRaw = loader.getDataSet(); 

StringToWordVector filter = new StringToWordVector(); 
filter.setInputFormat(dataRaw); 
Instances dataFiltered = Filter.useFilter(dataRaw, filter); 

「dataRaw」將包含一個屬性,它是文本和一個屬性,它是類(從目錄分類導出):System.out.println(dataRaw.numAttributes()); // outputs 2

是否有可能分離將文本轉換爲原始txt文件(例如使用分隔符?),以便加載不同的文本屬性而不是一個?

一種選擇是在事後插入一些新的屬性,如:

dataRaw.insertAttributeAt(new Attribute("attr2", (FastVector) null), dataRaw.numAttributes()); 
for (int i = 0; i < dataRaw.numInstances(); i++) { 
     dataRaw.instance(i).setValue(2, "sometext"); 
} 

或者創建像一個ARFF文件:

@relation whatever 

@attribute attr1 String 

@attribute attr2 String 

... 

有什麼辦法上面的設置可以通過實現'TextDirectoryLoader'?提前致謝!

回答

0

一旦您已加載的文件和形式[textString, classLabel]創建數據,你可以處理使用stringToWordVector()過濾器,它會爲你存在或不是在你的初始字符串的每一個字一個新的屬性,該字符串屬性 - >[word0, word1,...wordN, classLabel] 。這樣,您可以進一步處理更新的數據集或直接執行選擇的任務(聚類,分類等)。

爲了闡明,所提到的過濾器將您的文本字符串分解爲一組適合數據挖掘任務的單詞計數(或頻率)。

相關問題