2016-07-07 7 views
0

Ich habe ein Problem, wenn ich versuche, eine ARFF-Datei mit Weka zu öffnen.Nicht möglich, Struktur als arff zu bestimmen, wenn utf-8-arff-Datei in Weka verwendet wird

Wenn die Codierung der ARFF-Datei auf ANSI festgelegt ist, scheint alles gut zu funktionieren. Aber wenn ich die Kodierung UTF-8 (das ist, was meine Daten benötigen) erhalte ich folgende Fehlermeldung:

Unable to determine structure as arff(Reason java.io.Exception: keyword @relation expected,read token[@relation], line 1).

meine ARFF Datei korrekt formatiert zu sein scheint.

@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 
....... 

Anmerkung: Ich habe auch die Datei-Codierung auf UTF-8 in RunWeka.ini

Antwort

1

Datei als die Fehlerzeile 1 erwähnt, ich habe den Verdacht, die UTF-8-Datei mit einer BOM geschrieben wird bei der Anfang der Datei. Dieser nicht benötigte Bereich mit Nullbreite wird von Notepad unter Windows verwendet, um eine ANSI-Textdatei aus einer UTF-8-Textdatei zu erstellen.

Erstellen Sie die Datei ohne Stückliste, U+FEFF. Dies kann durch den Editor eines Programmierers (JEdit, Notepad ++), einen Hex-Editor, oder Sie können die erste Zeile löschen und neu eingeben. Überprüfen Sie die Dateigröße.

Viele Parser erwarten keine solche Stückliste, betrachten sie nicht als Leerzeichen und hängen.

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

Das hat funktioniert! Ich danke dir sehr! – xro7