-1

weka ライブラリからいくつかの関数をインポートする必要があるラッパーを作成しています。ただし、次のエラーが表示されます。

報告されていない例外 java.lang.Exception; キャッチするか、投げることを宣言する必要があります

私のコードは以下の通りです:

import java.io.*;
import weka.core.Instances;
import java.io.BufferedReader;
import java.io.FileReader;
import weka.core.converters.ConverterUtils.DataSource;
import java.lang.Integer;

public class wrapper
{
public static void main(String[] args)
{

    try
    {
        Runtime r = Runtime.getRuntime();
        Process p = r.exec("python frequency_counter_two.py nono 400 0");
        BufferedReader br = new BufferedReader(new         
        InputStreamReader(p.getInputStream()));
        p.waitFor();
        String line = "";
        while (br.ready())
            System.out.println(br.readLine());

    }
    catch (Exception e)
    {
    String cause = e.getMessage();
    if (cause.equals("python: not found"))
        System.out.println("No python interpreter found.");
    }

run_weka();


}



public static int run_weka()
{

DataSource source = new DataSource("features_ten_topics_10_unigrams_0_bigrams.csv");
Instances data = source.getDataSet();
// setting class attribute if the data format does not provide this information
// For example, the XRFF format saves the class attribute information as well
if (data.classIndex() == -1)
     data.setClassIndex(data.numAttributes() - 1);

/*

double percent = 66.0; 
Instances inst = data; // your full training set 
instances.randomize(java.util.Random);
int trainSize = (int) Math.round(inst.numInstances() * percent / 100); 
int testSize = inst.numInstances() - trainSize; 
Instances train = new Instances(inst, 0, trainSize); 
Instances test = new Instances(inst, trainSize, testSize);

// train classifier
Classifier cls = new J48();
cls.buildClassifier(train);
// evaluate classifier and print some statistics
Evaluation eval = new Evaluation(train);
eval.evaluateModel(cls, test);
System.out.println(eval.toSummaryString("\nResults\n======\n", false)); 

*/
}

}

何が起こっているのでしょうか?

4

2 に答える 2

0

基本的に、一部の weka メソッドが例外をスローする可能性があるため、この発生を処理するコードを記述する必要があります。

この場合、おそらくメソッドを次のように変更するでしょう...

public static int run_weka() {
    Instances data;

    try {
        DataSource source = new DataSource("features_ten_topics_10_unigrams_0_bigrams.csv");
        data = source.getDataSet();
    }
    catch (Exception e){
        System.out.println("An error occurred: " + e);
        return -1;
    }

    // setting class attribute if the data format does not provide this information
    // For example, the XRFF format saves the class attribute information as well
    if (data.classIndex() == -1)
         data.setClassIndex(data.numAttributes() - 1);
    /*
    Your commented code...
    */
    }
}
于 2012-05-03T13:29:56.980 に答える
0

run_weka() で DataSource コンストラクターと getDataSet() からスローされた例外を処理する必要があります。

ドキュメントを確認すると、どちらも java.lang.Exception をスローすることがわかります: http://crdd.osdd.net/man/wiki/weka/core/converters/ConverterUtils.DataSource.html

于 2012-05-03T05:42:36.570 に答える