2017-05-28 3 views
0

J'utilise l'API JAVA de Weka pour classer des documents selon différentes caractéristiques textuelles. En utilisant la classe TextDirectoryLoader, je peux charger un répertoire avec des fichiers txt contenant du texte, transformer le texte en fonction numérique et classer les instances plus tard. Le problème est que ce texte sera représenté par une seule entité String dans l'ensemble de données.Comment charger des attributs textuels séparés dans weka TextDirectoryLoader?

Par exemple:

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 » contiendra un attribut qui est le texte et un attribut qui est la classe (dérivée de la taxonomie répertoire): System.out.println(dataRaw.numAttributes()); // outputs 2

Est-il possible de séparer le texte dans les fichiers txt d'origine (par exemple avec délimiteurs?), de sorte que les différents attributs textuels sont chargés au lieu d'un seul?

Une option serait d'insérer quelques nouveaux attributs après, par exemple:

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

Ou créer un fichier arff comme:

@relation whatever 

@attribute attr1 String 

@attribute attr2 String 

... 

Est-il possible le réglage ci-dessus pourrait être atteint par le 'TextDirectoryLoader'? Merci d'avance!

Répondre

0

Une fois que vous avez vos fichiers chargés et un ensemble de données est créée sous la forme [textString, classLabel], vous pouvez traiter cet attribut de chaîne en utilisant le filtre stringToWordVector(), ce qui crée un nouvel attribut pour chaque mot que vous avez présent ou non dans votre chaîne initiale ->[word0, word1,...wordN, classLabel] . De cette façon, vous pouvez continuer à traiter votre ensemble de données mis à jour ou effectuer directement la tâche de choix (regroupement, classification, etc.).

Pour clarifier, le filtre mentionné décompose votre chaîne de texte en un ensemble de comptage (ou fréquences) de mots, approprié pour les tâches d'exploration de données.