2016-05-27 19 views
1

私はwekaの初心者です。クラシファイアが訓練された後、wekaでテキストを分類する

私は、ディスクからデータセットをインポートすることができました(フォルダごとに1つのフォルダ、フォルダ内のこのカテゴリに関連するすべてのテキスト)、StringToWordVectorをtokenizerに適用し、Naive Multniomialカテゴライザをトレーニングしました。 C#でもJavaはもちろんOK)

ただし、プロジェクトでカテゴライザを使用する方法に関する情報はほとんど見つかりません。ユーザーが入力した不明なカテゴリのテキストがあるとします。このテキストにカテゴライザを適用して、そのカテゴリが属するカテゴリを推測するにはどうすればよいですか。 (コード "//ここで何をすべきか")。 すべてのヘルプは大幅に事前に

ジュリアン

string filepath = @"C:\Users\Julien\Desktop\Meal\"; 
    ClassificationDatasetHelper classHelper = new ClassificationDatasetHelper(); 
    weka.core.converters.TextDirectoryLoader tdl = new 
    weka.core.converters.TextDirectoryLoader(); 
    tdl.setDirectory(new java.io.File(filepath)); 
    tdl.setCharSet("UTF-8"); 

    weka.core.Instances insts = tdl.getDataSet(); 

    weka.filters.unsupervised.attribute.StringToWordVector swv = new weka.filters.unsupervised.attribute.StringToWordVector(); 
    swv.setInputFormat(insts); 
    swv.setDoNotOperateOnPerClassBasis(false); 
    swv.setOutputWordCounts(true); 
    swv.setWordsToKeep(1000); 
    swv.setIDFTransform(true); 
    swv.setMinTermFreq(1); 
    swv.setDoNotOperateOnPerClassBasis(false); 
    swv.setPeriodicPruning(-1); 
    weka.core.tokenizers.NGramTokenizer tokenizer = new weka.core.tokenizers.NGramTokenizer(); 
    tokenizer.setNGramMinSize(2); 
    tokenizer.setNGramMaxSize(2); 
    swv.setTokenizer(tokenizer); 

    insts = weka.filters.Filter.useFilter(insts, swv); 

    insts.setClassIndex(0); 

    weka.classifiers.Classifier cl = new weka.classifiers.bayes.NaiveBayesMultinomial(); 
    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); 
    string s = "Try to classify this text"; 
    weka.core.Instance instanceToClassify = new weka.core.Instance(); 

    // what to do here 
    // ??? 

    double predictedClass = cl.classifyInstance(instanceToClassify); 

おかげ

答えて

0

あなたのJavaアプリでウェカをしている使用方法を学習するのに最適な場所を;-)

おかげでいただければ幸いです公式Wekaウィキ。

https://weka.wikispaces.com/Use+Weka+in+your+Java+code#Classification-Classifying%20instances

基本的に、あなたは新しいデータセットを提供(分類器は、カテゴリ属性を無視します)、あなたはこの

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileReader; 
import java.io.FileWriter; 
import weka.core.Instances; 
... 
// load unlabeled data 
Instances unlabeled = new Instances(
         new BufferedReader(
          new FileReader("/some/where/unlabeled.arff"))); 

// set class attribute 
unlabeled.setClassIndex(unlabeled.numAttributes() - 1); 

// create copy 
Instances labeled = new Instances(unlabeled); 

// label instances 
for (int i = 0; i < unlabeled.numInstances(); i++) { 
    double clsLabel = tree.classifyInstance(unlabeled.instance(i)); 
    labeled.instance(i).setClassValue(clsLabel); 
} 
// save labeled data 
BufferedWriter writer = new BufferedWriter(
          new FileWriter("/some/where/labeled.arff")); 
writer.write(labeled.toString()); 
writer.newLine(); 
writer.flush(); 
writer.close(); 
のように、あなたのための各インスタンスにラベルを付け、それを頼みます
関連する問題