package storm.applications.model.sentiment; import com.aliasi.classify.ConditionalClassification; import com.aliasi.classify.LMClassifier; import com.aliasi.util.AbstractExternalizable; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import storm.applications.constants.SentimentAnalysisConstants.Conf; import storm.applications.util.config.Configuration; public class LingPipeClassifier implements SentimentClassifier { private static final Logger LOG = LoggerFactory.getLogger(LingPipeClassifier.class); private static final String DEFAULT_PATH = "sentimentanalysis/classifier.bin"; private LMClassifier classifier; @Override public void initialize(Configuration config) { try { String clsPath = config.getString(Conf.LINGPIPE_CLASSIFIER_PATH, DEFAULT_PATH); classifier = (LMClassifier) AbstractExternalizable.readObject(new File(clsPath)); } catch (ClassNotFoundException | IOException ex) { LOG.error(ex.getMessage(), ex); throw new RuntimeException("Unable to initialize the sentiment classifier"); } } @Override public SentimentResult classify(String str) { ConditionalClassification classification = classifier.classify(str); String cat = classification.bestCategory(); SentimentResult result = new SentimentResult(); result.setScore(classification.score(0)); switch (cat) { case "pos": result.setSentiment(SentimentResult.Sentiment.Positive); break; case "neg": result.setSentiment(SentimentResult.Sentiment.Negative); break; default: result.setSentiment(SentimentResult.Sentiment.Neutral); break; } return result; } }