编译包含weka的代码时,java unreported exception java.lang.Exception错误

时间:2012-05-03 05:26:29

标签: java weka

我正在编写一个需要从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)); 

*/
}

}

对可能发生的事情的任何想法?

2 个答案:

答案 0 :(得分:0)

您必须处理从DataSource构造函数抛出的异常和run_weka()中的getDataSet()。

如果查看文档,可以看到它们都抛出了java.lang.Exception:http://crdd.osdd.net/man/wiki/weka/core/converters/ConverterUtils.DataSource.html

答案 1 :(得分: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...
    */
    }
}