Mallet中正确的svmlight输入格式是什么?

时间:2017-09-21 11:40:49

标签: classification mallet svmlight

我使用Mallet使用SVMLight输入格式使用classification分类符NaiveBayes进行NumberFormatException。但我得到public void trainMalletNaiveBayes() throws Exception { ArrayList<Pipe> pipes = new ArrayList<Pipe>(); pipes.add(new SvmLight2FeatureVectorAndLabel()); pipes.add(new PrintInputAndTarget()); SerialPipes pipe = new SerialPipes(pipes); //prepare training instances InstanceList trainingInstanceList = new InstanceList(pipe); trainingInstanceList.addThruPipe(new CsvIterator(new FileReader("/tmp/featureFiles_svm.csv"), "^(\\S*)[\\s,]*(.*)$", 2, 1, -1)); //prepare test instances InstanceList testingInstanceList = new InstanceList(pipe); testingInstanceList.addThruPipe(new CsvIterator(new FileReader("/tmp/test_set.csv"), "^(\\S*)[\\s,]*(.*)$", 2, 1, -1)); ClassifierTrainer trainer = new NaiveBayesTrainer(); Classifier classifier = trainer.train(trainingInstanceList); 。我想知道在使用SVMLight时如何使用字符串功能。正如我在指南1中所读到的那样,这些功能也可以是字符串。

任何人都可以帮我解决我的代码或输入错误吗?

这是我的代码:

No f1:NP f2:NN f3:1 f4:1 f5:0 f6:0 f7:0 f8:0.0 f9:1 f10:true f11:false f12:false f13:false f14:false f15:ROOT f16:NN f17:NOTHING
No f1:NP f2:NN f3:8 f4:4 f5:0 f6:0 f7:1 f8:4.127134385045092 f9:8 f10:true f11:false f12:false f13:false f14:false f15:ROOT f16:DT f17:NOTHING
Yes f1:NP f2:NN f3:4 f4:3 f5:0 f6:0 f7:0 f8:0.0 f9:4 f10:true f11:false f12:false f13:false f14:false f15:NP f16:DT f17:NN

这是输入文件的前三行:

NN

第一列是实例的标签,其余数据包括功能及其值。例如,POS显示短语的首字的NN

与此同时,我得到了NumberFormatException: For input string: "NN"NP)的例外情况。我想知道为什么它之前的NN没有任何问题,但在print(n, m); 停止。

1 个答案:

答案 0 :(得分:1)

所有功能都需要具有数值。对于布尔值,您可以使用true = 1和false = 0。您还必须将f1:NP修改为f1_NP = 1.

它不会死于NP的原因是SvmLight2FeatureVectorAndLabel类期望解析整行(标签和数据),但代码正在读取文件,其中CsvIterator正在分裂将第一个元素作为标签。

classify.tui.SvmLight2Vectors类将此代码用于迭代器:

new SelectiveFileLineIterator (fileReader, "^\\s*#.+")