- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 weka 将 CSV 转换为 ARFF。但它会弹出那些错误消息。
weka.core.converters.CSVLoaderfailed to lead <my file>
Reason:
wrong number of values. Read 7, expected 9, read Token[EOL], line 26
我尝试替换 "' , %
这些特殊字符,但也保持不变。
有什么想法吗?
https://drive.google.com/open?id=1__u9SGOxd-ShU9Eei3tDjZ9s1MxzKEKZ链接的文件
最佳答案
值内部的换行符是问题所在。将它们替换为其他内容,例如空格。
问题是您的值包含换行符(\n
等),并且 Weka 的 CSVLoader 无法处理它。第 26 行是文件中包含此类换行符的第一行,但 CSVLoader 在仅读取 7 个字段后认为该行在此结束。
看看 source code :
private void initTokenizer(StreamTokenizer tokenizer) {
tokenizer.resetSyntax();
tokenizer.whitespaceChars(0, (' ' - 1));
tokenizer.wordChars(' ', '\u00FF');
tokenizer.whitespaceChars(m_FieldSeparator.charAt(0),
m_FieldSeparator.charAt(0));
// tokenizer.commentChar('%');
String[] parts = m_Enclosures.split(",");
for (String e : parts) {
if (e.length() > 1 || e.length() == 0) {
throw new IllegalArgumentException(
"Enclosures can only be single characters");
}
tokenizer.quoteChar(e.charAt(0));
}
tokenizer.eolIsSignificant(true); // <--- This line is important
}
最后一行基本上表示分词器应将行尾 (EOL) 视为特殊字符(请参阅 API doc ):
If the flag is false, end-of-line characters are treated as white space and serve only to separate tokens.
CSVLoader 的 getInstance
方法包含以下逻辑(摘要):
private String getInstance(StreamTokenizer tokenizer) throws IOException {
// [...]
boolean first = true;
boolean wasSep;
m_current.clear();
int i = 0;
while (tokenizer.ttype != StreamTokenizer.TT_EOL
&& tokenizer.ttype != StreamTokenizer.TT_EOF) {
// Get next token
if (!first) {
StreamTokenizerUtils.getToken(tokenizer);
}
if (tokenizer.ttype == m_FieldSeparator.charAt(0)
|| tokenizer.ttype == StreamTokenizer.TT_EOL) {
m_current.add("?");
wasSep = true;
} else {
// Parsing values
// [...]
}
if (!wasSep) {
StreamTokenizerUtils.getToken(tokenizer);
}
first = false;
i++;
}
// check number of values read
if (m_current.size() != m_structure.numAttributes()) {
for (Object o : m_current) {
System.out.print(o.toString() + "|||");
}
System.out.println();
StreamTokenizerUtils.errms(tokenizer, "wrong number of values. Read "
+ m_current.size() + ", expected " + m_structure.numAttributes());
}
// [...]
}
因此,无论换行符是否在引号内,标记生成器都将始终将其视为 StreamTokenizer.TT_EOL
,这会结束读取记录,因此最终得到的字段少于预期。
关于java - Weka CSVloader - 错误(值的数量错误。读取),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52286909/
我正在尝试使用 weka 将 CSV 转换为 ARFF。但它会弹出那些错误消息。 weka.core.converters.CSVLoaderfailed to lead Reason: wrong
我使用 weka 用 java 编写了一个程序来对我的数据进行分类。 第一个版本使用ArffLoader加载.Arff文件,该版本可以正常运行。 但是,当我将代码更改为使用 CSVLoader 时,我
我正在尝试使用来自 GUI 的 Weka CSVLoader 将 CSV 转换为 ARFF。在选项中,我将字符串的包围字符设置为 " ,虽然我的文件中没有引号。 我收到以下错误: weka.core.
我似乎无法弄清楚我哪里出了问题。该脚本非常适用于 PigStorage,但为 CSVLoader 提供了这个 ClassCastException。 我检查了文档,但没有帮助。 这是堆栈跟踪: Pig
我是一名优秀的程序员,十分优秀!