在Weka中使用utf-8 arff文件时无法将结构确定为arff

时间:2016-07-07 11:25:49

标签: machine-learning nlp weka

当我尝试用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

1 个答案:

答案 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!
}