1

感情分析のタスクがあります。トレーニング データとして (ネガティブまたはポジティブとしてラベル付けされた) ツイートがあります。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();
    }
4

0 に答える 0