当我尝试用Weka打开一个arff文件时,我遇到了一个问题。
当arff文件的编码设置为ANSI时,一切似乎都运行良好。但是当我将编码设置为utf-8(这是我的数据所需)时,我收到以下错误:
无法将结构确定为arff(原因java.io.Exception:关键字@relation expected,read token [@relation],第1行)。
我的arff文件似乎格式正确。
@relation myrelation
@attribute pagename string
@attribute pagetext string
@attribute pagecategory string
@attribute pageclass {0,1,2,3,4,5,6,7,8,9,10}
@data
.......
注意:我还在RunWeka.ini文件中将文件编码更改为utf-8
答案 0 :(得分:1)
由于错误提到第1行,我怀疑UTF-8文件是在文件的开头用BOM写的。 Windows下的记事本使用这个不需要的零宽度空间来从UTF-8文本文件中删除ANSI文本文件。
创建没有BOM的文件U+FEFF
。这可以通过程序员的编辑器(JEdit,Notepad ++),一些十六进制编辑器来完成,或者你可以删除第一行并重新输入它。检查文件大小。
许多解析器不期望这样的BOM,不要考虑空格,并挂起。
Path path = Paths.get("...");
String s = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
String t = s.replaceFirst("^\uFEFF", "");
if (!s.equals(t)) {
System.out.println("BOM character present in UTF-8 text");
Files.write(path, t.getBytes(StandardCharsets.UTF_8)); // Replaces file!
}