2017-05-28 3 views
0

Ich benutze die JAVA API von Weka, um Dokumente nach verschiedenen Textmerkmalen zu klassifizieren. Wenn ich die Klasse TextDirectoryLoader verwende, kann ich ein Verzeichnis mit txt-Dateien laden, die etwas Text enthalten, den Text in ein numerisches Feature umwandeln und die Instanzen später klassifizieren. Das Problem besteht darin, dass dieser Text durch ein einzelnes String-Feature im Dataset dargestellt wird.Wie laden Sie separate Textattribute in weka TextDirectoryLoader?

Zum Beispiel:

TextDirectoryLoader loader = new TextDirectoryLoader(); 
loader.setDirectory(new File(dataDir)); 

Instances dataRaw = loader.getDataSet(); 

StringToWordVector filter = new StringToWordVector(); 
filter.setInputFormat(dataRaw); 
Instances dataFiltered = Filter.useFilter(dataRaw, filter); 

‚dataRaw‘ ein Attribut enthalten, die der Text und ein Attribut, das die Klasse (aus dem Verzeichnis Taxonomie abgeleitet) ist: System.out.println(dataRaw.numAttributes()); // outputs 2

Ist es möglich, zu trennen der Text in die ursprünglichen txt-Dateien (zum Beispiel mit Trennzeichen?), so dass verschiedene Textattribute anstelle von einem geladen werden?

Eine Möglichkeit wäre, danach einige neue Attribute einfügen, zB:

dataRaw.insertAttributeAt(new Attribute("attr2", (FastVector) null), dataRaw.numAttributes()); 
for (int i = 0; i < dataRaw.numInstances(); i++) { 
     dataRaw.instance(i).setValue(2, "sometext"); 
} 

Oder eine ARFF Datei wie erstellen:

@relation whatever 

@attribute attr1 String 

@attribute attr2 String 

... 

Gibt es eine Möglichkeit die obige Einstellung über das erreicht werden könnte 'TextDirectoryLoader'? Danke im Voraus!

Antwort

0

Sobald Sie Ihre Dateien geladen und ein Datensatz wird in Form [textString, classLabel] erstellt haben, können Sie diese Zeichenfolge Attribut stringToWordVector() Filter verarbeiten, die für jedes Wort ein neues Attribut erzeugt Sie Zeit haben oder nicht in Ihrem ersten string ->[word0, word1,...wordN, classLabel] . Auf diese Weise können Sie Ihren aktualisierten Datensatz weiterverarbeiten oder die gewünschte Aufgabe direkt ausführen (Clustering, Klassifizierung usw.).

Um zu verdeutlichen, zerlegt der genannte Filter Ihre Textzeichenfolge in eine Reihe von Zählern (oder Häufigkeiten) von Wörtern, die für Data-Mining-Aufgaben geeignet sind.