当我尝试使用 Weka 打开 arff 文件时遇到问题。
当 arff 文件的编码设置为 ANSI 时,一切似乎都运行良好。但是当我将编码设置为 utf-8 (这是我的数据所需的)时,我收到以下错误:
Unable to determine structure as arff(Reason java.io.Exception: keyword @relation expected,read token[@relation], line 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 行,我怀疑 UTF-8 文件在文件开头写入了 BOM。 Windows 下的记事本使用这个不需要的零宽度空格来区分 ANSI 文本文件和 UTF-8 文本文件。
创建不带 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!
}
关于machine-learning - 在Weka中使用utf-8 arff文件时无法确定结构为arff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38244254/