2012-03-02 62 views
0

我通过C#代码运行weka,代码如下。通过C运行weka#

using System; 

class MainClass 
{ 
     public static void Main(string[] args) 
{ 
    Console.WriteLine("Hello Java, from C#!"); 
    classifyTest(); 
    } 

    const int percentSplit = 66; 
    public static void classifyTest() 
    { 
    try 
    { 
     weka.core.Instances insts = new weka.core.Instances(new java.io.FileReader("iris.arff")); 
     insts.setClassIndex(insts.numAttributes() - 1); 

     weka.classifiers.Classifier cl = new weka.classifiers.trees.J48(); 
     Console.WriteLine("Performing " + percentSplit + "% split evaluation."); 

     //randomize the order of the instances in the dataset. 
        weka.filters.Filter myRandom = new weka.filters.unsupervised.instance.Randomize(); 
     myRandom.setInputFormat(insts); 
        insts = weka.filters.Filter.useFilter(insts, myRandom); 

     int trainSize = insts.numInstances() * percentSplit/100; 
     int testSize = insts.numInstances() - trainSize; 
     weka.core.Instances train = new weka.core.Instances(insts, 0, trainSize); 

     cl.buildClassifier(train); 
     int numCorrect = 0; 
     for (int i = trainSize; i < insts.numInstances(); i++) 
     { 
      weka.core.Instance currentInst = insts.instance(i); 
      double predictedClass = cl.classifyInstance(currentInst); 
      if (predictedClass = insts.instance(i).classValue()) 
       numCorrect++; 
     } 
     Console.WriteLine(numCorrect + " out of " + testSize + " correct (" + 
        (double)((double)numCorrect/(double)testSize * 100.0) + "%)"); 
    } 
    catch (java.lang.Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
} 

} 
//end of file Main.cs 

我已添加Weka.dll和ikvm.JDK.Core.dll文件。 但是,当我尝试运行它

为“的java.io.File”的类型初始抛出异常

可能是什么问题,我得到这个错误?

回答

0

您不指定"iris.arff"的路径,该文件可能不在您的应用程序的启动目录中。

+0

即使在指定路径后,我也得到相同的错误 – Cyang 2012-03-26 09:56:34

1

确保您添加Refrences为IKVM.Runtime.dll和IKVM.Runtime.JNI.dll

0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using weka.classifiers.meta; 
using weka.classifiers.functions; 
using weka.core; 
using java.io; 
using weka.clusterers; 
using System.Diagnostics; 
using System.Threading; 

我测试使用上述库,followes这个剧本,并得到了双对布尔错误:

 if (predictedClass = insts.instance(i).classValue()) 
     numCorrect++; 

但是,一旦路径otis.arff被设置,它就可以正常工作。我希望这有帮助。

0

问题是,您没有添加所有需要的引用,您必须添加所有以ikvm.OpenJDK开头的dll文件,并且文件IKVM.Runtime.dll也确保您将weka.jar转换为weka.dll使用IKVM

+0

请检查此[URL](http://stackoverflow.com/help)它将有助于提升内容质量 – 2016-05-27 03:52:43