我正在编写一个需要从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));
*/
}
}
对可能发生的事情的任何想法?
答案 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...
*/
}
}