2016-07-07 4 views
0

У меня возникла проблема, когда я пытаюсь открыть файл arff с помощью Weka.Невозможно определить структуру как arff при использовании файла utf-8 arff в Weka

Когда кодировка файла 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 
....... 

примечание: Я также изменил кодировку файла UTF-8 в RunWeka.ini файл

ответ

1

Как ошибка упоминается линия 1, у меня есть подозрение, файл UTF-8 записывается с BOM в начало файла. Это ненужное пространство нулевой ширины используется Notepad под Windows, чтобы distinghuish текстовый файл ANSI из текстового файла UTF-8.

Создать файл без спецификации, U+FEFF. Это может быть сделано редактором программиста (JEdit, Notepad ++), некоторым шестнадцатеричным редактором, или вы можете удалить первую строку и повторно ввести ее. Проверьте размер файла.

Многие парсеры не ожидают такой спецификации, не считают ее пробелом и зависанием.

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! 
} 
+0

Это сработало! Спасибо огромное! – xro7

Смежные вопросы