我尝试使用 Java 中的 Mallet 实现文档分类器。我已经有一个基本包含特征值的文件。所以我不想运行整个 raw text
处理管道。
目前我的特征文件中的一行看起来像这样(2 个特征,ID 和 NrOfToken,文档标签是“A”)
ID=3 NrofTokens=279.0 A
我尝试读入这个文件并将其放入这样的分类器中:
Pipe instancePipe = new SerialPipes(new Pipe[] {
new CharSequence2TokenSequence(),
new TokenSequence2FeatureSequence(),
new Target2Label(),
});
InstanceList trainData = new InstanceList(instancePipe);
InstanceList testData = new InstanceList(instancePipe);
Reader trainFileReader = new InputStreamReader(new FileInputStream(fileTrain), "UTF-8");
trainData.addThruPipe(new LineGroupIterator(trainFileReader, Pattern.compile("^\\s*$"), true));
Reader testFileReader = new InputStreamReader(new FileInputStream(fileTest), "UTF-8");
testData.addThruPipe(new LineGroupIterator(testFileReader, Pattern.compile("^\\s*$"), true));
// Create a classifier trainer, and use it to create a classifier
@SuppressWarnings("rawtypes")
ClassifierTrainer naiveBayesTrainer = new NaiveBayesTrainer();
Classifier classifier = naiveBayesTrainer.train(trainData);
目前我得到这个异常:
java.lang.IllegalArgumentException: Alphabets don't match: Instance: [6, null], InstanceList: [6, 0]
at cc.mallet.types.InstanceList.add(InstanceList.java:335)
at cc.mallet.types.InstanceList.addThruPipe(InstanceList.java:267)
at
有人知道 Alphabet 为什么会崩溃吗?
最佳答案
这并不是一个真正的答案,但我发现 Mallet 中的异常(exception)情况到目前为止并没有提供太多信息。我也遇到了这个错误,更改了解析数据行的正则表达式并在末尾删除了一个空行使其消失了。
即这部分的正则表达式
CsvIterator reader = new CsvIterator(new FileReader(tempTrainPath), "(\\w+)\\s+(\\S+)\\s+(.*)", 3, 2, 1);
testInstances.addThruPipe(reader);
在一整天的调试结束后,我实在是太恼火了,无法确定这两者中的哪一个才是真正的罪魁祸首。但也许此信息可以帮助其他人。
https://stackoverflow.com/questions/37262125/
相关文章:
objective-c - 自定义 UIButton 焦点在 tvOS 中无法正常工作
ios - UIPageViewController 不允许识别 UIScreenEdgePanGe
c# - Asp.Net Web Api 在 Godaddy 服务器上不工作,但在本地工作正常
python - 在 Python 中获取页面的所有请求 url
python - Django模型实例的full_clean方法,是这样吗?
android - CardView 内的 ExpandableListView 不会改变其父级高度
ios - 如何通过gcdwebserver获取本地html文件