WEKA ライブラリを使用して SMS SPAM 分類子を作成しようとしています。「ラベル」と「テキスト」の見出しを持つ CSV ファイルがあります。以下のコードを使用すると、2 つの属性を持つ ARFF ファイルが作成されます。
@attribute label {ham,spam}
@attribute text {'Go until jurong point','Ok lar...', etc.}
現在、テキスト属性は、各メッセージのテキストを値として持つ公称属性としてフォーマットされているようです。しかし、すべてのインスタンスからのすべてのテキストのリストではなく、テキスト属性を文字列属性にする必要があります。テキスト属性を文字列として持つことで、StringToWordVector フィルターを使用して分類器をトレーニングできます。
// load CSV
CSVLoader loader = new CSVLoader();
loader.setSource(new File(args[0]));
Instances data = loader.getDataSet();
// save ARFF
ArffSaver saver = new ArffSaver();
saver.setInstances(data);
saver.setFile(new File(args[1]));
saver.setDestination(new File(args[1]));
saver.writeBatch();
次のような String 属性を作成できることはわかっています。
Attribute tmp = new Attribute("tmp", (FastVector) null);
しかし、現在の属性を置き換える方法や、CSV を読み込む前に属性の種類を設定する方法がわかりません。
新しい文字列属性を挿入して、現在の公称属性を削除しようとしましたが、これによりすべての SMS テキストが削除されます。renameAttributeValueも使用してみましたが、これは属性タイプの変更には機能しないようです。
編集: このNominalToString フィルターが機能すると思われますが、使用方法がわかりません。
どんな提案でも大歓迎です。ありがとう!