感情分析のタスクがあります。トレーニング データとして (ネガティブまたはポジティブとしてラベル付けされた) ツイートがあります。StringToWordVector と NaiveBayesMultinomial を使用してモデルを作成しました。
コード:
try{
TextDirectoryLoader loader = new TextDirectoryLoader();
loader.setDirectory(new File("./train/"));
Instances dataRaw = loader.getDataSet();
System.out.println(loader.getStructure());
StringToWordVector filter = new StringToWordVector();
filter.setInputFormat(dataRaw);
Instances dataFiltered = Filter.useFilter(dataRaw, filter);
System.out.println("\n\nFiltered data:\n\n" + dataFiltered);
// train Multinomial NaiveBayes classifier and output model
NaiveBayesMultinomial classifier = new NaiveBayesMultinomial();
classifier.buildClassifier(dataFiltered);
//System.out.println("\n\nClassifier model:\n\n" + classifier);
//save the model
weka.core.SerializationHelper.write("./model/naviebayesmodel/", classifier);
}catch(Exception ex){
ex.printStackTrace();
}
今度は、新しいツイートでこのモデルをテストしたいと思います。分類子のテスト部分を解決できません。次のコードを試しましたが、インスタンスがキャプチャされません。既存のモデルを使用して新しいツイートをテストするには?
コード:
try{
Classifier cls = (Classifier) weka.core.SerializationHelper.read("./model/naviebayesmodel");
//Instances ins = (Instances)weka.core.SerializationHelper.read("./model/naviebayesmodel");
//System.out.println(ins);
//i.s
TextDirectoryLoader loader = new TextDirectoryLoader();
loader.setDirectory(new File("./test/-1/"));
Instances dataRaw = loader.getDataSet();
//String data = "hello, I am your test case. This is a great clasifier :) !!";
StringToWordVector filter = new StringToWordVector();
filter.setInputFormat(dataRaw);
//Instances unlabeled = new Instances(new BufferedReader(new FileReader("./test/test.txt")));
Instances dataFiltered = Filter.useFilter(dataRaw, filter);
dataRaw.setClassIndex(dataRaw.numAttributes() - 1);
//Instances dataFiltered = Filter.useFilter(unlabeled, filter);
for (int i = 0; i < dataRaw.numInstances(); i++) {
double clsLabel = cls.classifyInstance(dataRaw.instance(i));
System.out.println(clsLabel);
}
//System.out.println(dataRaw.numInstances());
}catch(Exception ex){
ex.printStackTrace();
}