2017-05-28 8 views
0

私はWekaのJAVA APIを使用して、さまざまなテキスト機能に従って文書を分類しています。 TextDirectoryLoaderクラスを使用する場合、テキストを含むtxtファイルを含むディレクトリをロードすることができます。テキストを数値フィーチャに変換し、後でそのインスタンスを分類します。問題は、このテキストがデータセット内の単一の文字列フィーチャによって表されることです。例えばweka TextDirectoryLoaderで別のテキスト属性を読み込むには?

System.out.println(dataRaw.numAttributes()); // outputs 2

はそれを分離することが可能である:

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」(ディレクトリ分類から派生)クラスで、テキストと一つの属性である一つの属性が含まれていますテキストを元のtxtファイル(例えば区切り文字を使用して)に挿入すると、別のテキスト属性が読み込まれるようになります。

1つのオプションは、例えば、その後、いくつかの新しい属性を挿入するには、次のようになります。

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'?前もって感謝します!あなたのファイルがロードされているデータセットは、フォーム[textString, classLabel]で作成されると

答えて

0

は、あなたが存在かどうか、あなたの最初の文字列を持っているすべての単語のための新しい属性を作成しますstringToWordVector()フィルタを使用して、その文字列の属性を処理することができます - >[word0, word1,...wordN, classLabel] 。この方法で、更新されたデータセットをさらに処理したり、選択したタスク(クラスタリング、分類など)を直接実行することができます。

明らかにするために、上記のフィルタは、テキスト文字列をデータマイニングタスクに適した単語の集まり(または頻度)のセットに分解します。

関連する問題