これについて多くの例を見ましたが、これまでのところ運がありません。フリーテキストを分類したいと思います。
- テキスト分類子を構成します。(StringToWordVector と LibSVM を使用した FilteredClassifier)
- 分類子をトレーニングします (多数のドキュメントを追加し、フィルター処理されたテキストでトレーニングします)
- FilteredClassifier をディスクにシリアル化し、アプリを終了します
じゃあ後で
- シリアル化された FilteredClassifier をロードする
- モノを分類!
ディスクから読み取って物事を分類しようとするときまでは問題ありません。すべてのドキュメントと例は、トレーニング リストとテスト リストが同時に作成されていることを示しています。私の場合は、事後的にテスト リストを作成しようとしています。
FilteredClassifier だけでは、元のトレーニング セットと同じ "辞書" を使用してテスト インスタンスを作成するのに十分ではありません。
http://weka.wikispaces.com/Use+WEKA+in+your+Java+codeは、「どこかからロードされたインスタンス」とだけ言っており、同様の辞書の使用については何も述べていません。
ClassifierFramework cf = new WekaSVM();
if (!cf.isTrained()) {
train(cf); // Train, save to disk
cf = new WekaSVM(); // reloads from file
}
cf.test("this is a test");
投げて終わる
java.lang.ArrayIndexOutOfBoundsException: 2
at weka.core.DenseInstance.value(DenseInstance.java:332)
at weka.filters.unsupervised.attribute.StringToWordVector.convertInstancewoDocNorm(StringToWordVector.java:1587)
at weka.filters.unsupervised.attribute.StringToWordVector.input(StringToWordVector.java:688)
at weka.classifiers.meta.FilteredClassifier.filterInstance(FilteredClassifier.java:465)
at weka.classifiers.meta.FilteredClassifier.distributionForInstance(FilteredClassifier.java:495)
at weka.classifiers.AbstractClassifier.classifyInstance(AbstractClassifier.java:70)
at ratchetclassify.lab.WekaSVM.test(WekaSVM.java:125)