2

私は C# を使用しており、IKVM.OpenJDK.Core.dll を含め、次の Java コードを使用しています。

public static void cvdTest()
{

    weka.core.Instances data = new weka.core.Instances(new java.io.FileReader("test.arff"));
    data.setClassIndex(data.numAttributes() - 1);

    weka.classifiers.Classifier cls = new weka.classifiers.bayes.NaiveBayes();

    int runs = 1;
    int folds = 10;

    // perform cross-validation
    for (int i = 0; i < runs; i++) {
      // randomize data
      int seed = i + 1;
      java.util.Random rand = new java.util.Random(seed);
      weka.core.Instances randData = new weka.core.Instances(data);
      randData.randomize(rand);
      if (randData.classAttribute().isNominal())
        randData.stratify(folds);

      weka.classifiers.Evaluation eval = new weka.classifiers.Evaluation(randData);
      for (int n = 0; n < folds; n++) {
        weka.core.Instances train = randData.trainCV(folds, n);
        weka.core.Instances test = randData.testCV(folds, n);
        // build and evaluate classifier
        weka.classifiers.Classifier clsCopy = weka.classifiers.Classifier.makeCopy(cls);
        clsCopy.buildClassifier(train);
        eval.evaluateModel(clsCopy, test);
      }

しかし、次のエラーが発生します。

「java.io.File」の型初期化子が例外をスローしました。

行上:

weka.core.Instances data = new weka.core.Instances(new java.io.FileReader("test.arff"));
4

5 に答える 5

4

C# プロジェクトへの参照として追加する前に、Ikvm を使用して weka.jar から weka.dll への変換をスキップしていないことを確認してください Java から .NET dll への変換やりたいことは、Weka .jar ファイルを .NET dll に変換することです。これを行うには、IKVM 静的コンパイラである ikvmc を使用します。コンソールで、weka.jar を含むディレクトリに移動し、次のように入力します。

ikvmc -target:ライブラリ weka.jar

-target:library 呼び出しにより、ikvmc は実行可能ファイルではなく .dll ライブラリを作成します。

IKVM チュートリアルでは、上記のコマンドに -reference:/usr/lib/IKVM.GNU.Classpath.dll (または適切なパス) を追加する必要があることが示されていることに注意してください。GNU クラスパス ライブラリの場所が IKVM に示されています。ただし、IKVM.GNU.Classpath.dll はダウンロード パッケージに含まれなくなり、非常に古いバージョンの IKVM のものです。Sun が Java をオープンソース化すると、IKVM.OpenJDK.*.dll ファイルに置き換えられました。

これで、weka API 全体の .NET バージョンである「weka.dll」というファイルが作成されます。それはまさにあなたが必要とするものです!

于 2016-05-23T01:43:18.887 に答える
1

必要な dll を追加していない可能性があります。次の dll を参照に追加してみてください: IKVM.Runtime.dll および IKVM.OpenJDK.Text.dll。また、「多くの場合、例外は元の例外をラップします。そのような場合、InnerException プロパティは元の例外に関する情報を保持します。」したがって、例外の理由を調べるには、ViewDetail に移動し、内部例外を調べます (入れ子にすることができるため、探しているものが見つからない間は下に移動します)。

于 2013-04-30T09:52:33.313 に答える
0

参照に次のリストが含まれていることを確認してください。

ここに画像の説明を入力

于 2016-11-08T09:01:50.413 に答える
0

IKVM.OpenJDK.XML.Parse.dll への参照を含めることで問題が解決しました。

于 2012-09-26T17:51:36.227 に答える
0

以下を使用できます。

weka.core.converters.ConverterUtils.DataSource source = 
  new weka.core.converters.ConverterUtils.DataSource(filePath);
于 2012-05-31T18:04:31.970 に答える