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

标签 machine-learning nlp weka

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

相关文章:

matlab - 交叉验证matlab - crossval函数

python - 从mfcc python生成.wav文件

python - 可以在管道处理期间从 spaCy 文档中删除 token 吗?

weka - useLaplace 参数在 WEKA j48 算法中起什么作用?

python - Python 中的 Mclust (R) 等效包

python - 了解Keras的ImageDataGenerator类中的 `width_shift_range`和 `height_shift_range`参数

python - GridsearchCV sklearn 中的错误

text - 从文本生成问题 (NLP)

weka - 使用 WEKA 进行命名实体识别

python - 如何使用下载的bigml模型进行本地预测?