2017-03-28 1 views
1

J'ai un jeu de données de 1 million de phrases étiquetées et je l'utilise pour trouver des sentiments à l'aide de l'entropie maximale. J'utilise Stanford classificateur pour la même: -Enregistrement et chargement d'un classificateur Stanford formé en Java

public class MaximumEntropy { 

static ColumnDataClassifier cdc; 

public static float calMaxEntropySentiment(String text) { 
    initializeProperties(); 
    float sentiment = (getMaxEntropySentiment(text)); 
    return sentiment; 
} 

public static void initializeProperties() { 
    cdc = new ColumnDataClassifier(
      "\\stanford-classifier-2016-10-31\\properties.prop"); 
} 

public static int getMaxEntropySentiment(String tweet) { 

    String filteredTweet = TwitterUtils.filterTweet(tweet); 
    System.out.println("Reading training file"); 
    Classifier<String, String> cl = cdc.makeClassifier(cdc.readTrainingExamples(
      "\\stanford-classifier-2016-10-31\\labelled_sentences.txt")); 

    Datum<String, String> d = cdc.makeDatumFromLine(filteredTweet); 
    System.out.println(filteredTweet + " ==> " + cl.classOf(d) + " " + cl.scoresOf(d)); 
    // System.out.println("Class score is: " + 
    // cl.scoresOf(d).getCount(cl.classOf(d))); 
    if (cl.classOf(d) == "0") { 
     return 0; 
    } else { 
     return 4; 
    } 
} 
} 

Mes données est étiqueté 0 ou 1. Maintenant, pour chaque tweet l'ensemble des données est en cours de lecture et il prend beaucoup de temps compte tenu de la taille des données. Ma requête est-ce qu'il y a un moyen de former le classificateur, puis de le charger quand le sentiment d'un tweet doit être trouvé. Je pense que cette approche prendra moins de temps. Corrigez-moi si je me trompe. Le lien suivant fournit ceci mais il n'y a rien pour l'API JAVA. Saving and Loading Classifier Toute aide serait appréciée.

Répondre

2

Oui; La façon la plus simple d'y parvenir est d'utiliser le mécanisme de sérialisation par défaut de Java pour sérialiser un classificateur. Une aide utile est ici la classe IOUtils:

IOUtils.writeObjectToFile(classifier, "/path/to/file"); 

Pour lire le classificateur:

Classifier<String, String> cl = IOUtils.readObjectFromFile(new File("/path/to/file"); 
+0

Merci beaucoup –