/**
*
*/
package com.maalaang.omtwitter.tools;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Properties;
import org.apache.log4j.Level;
import org.apache.uima.resource.ResourceConfigurationException;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.util.InvalidXMLException;
import com.maalaang.omtwitter.io.LogSystemStream;
import com.maalaang.omtwitter.uima.pipeline.OMTwitterFixedFlowPipeline;
/**
* @author Sangwon Park
*
*/
public class EvaluateAnalysisResult {
public static void main(String[] args) {
try {
EvaluateAnalysisResult.addLibraryPath(System.getProperty("user.dir") + "/target/lib/jnisvmlight/");
Properties prop = new Properties();
prop.load(new InputStreamReader(new FileInputStream(args[0]), "UTF-8"));
LogSystemStream.redirectErrToLog(Level.WARN);
OMTwitterFixedFlowPipeline pipeline = new OMTwitterFixedFlowPipeline();
pipeline.setReader("TwitterCorpusReader", "com/maalaang/omtwitter/uima/reader/uima-twitter-corpus-reader.xml");
pipeline.setReaderParameter("TwitterCorpusReader", "twitterCorpusFile", prop.getProperty("target.twitter.corpus.file"));
pipeline.setReaderParameter("TwitterCorpusReader", "fields", prop.getProperty("target.twitter.corpus.fields"));
pipeline.setReaderParameter("TwitterCorpusReader", "fieldsDelimiter", prop.getProperty("target.twitter.corpus.fields.delim"));
pipeline.addAnnotator("StanfordPosAnnotator", "com/maalaang/omtwitter/uima/annotator/uima-stanford-pos-annotator.xml");
pipeline.addAnnotator("SnowballStemAnnotator", "com/maalaang/omtwitter/uima/annotator/uima-snowball-stem-annotator.xml");
pipeline.addAnnotator("NegExAnnotator", "com/maalaang/omtwitter/uima/annotator/uima-negex-annotator.xml");
pipeline.setAnnotatorParameter("NegExAnnotator", "negexWindowSize", 5);
pipeline.addAnnotator("SentiWordNetAnnotator", "com/maalaang/omtwitter/uima/annotator/uima-sentiment-score-annotator.xml");
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "sentiScoreDicObjectFile", prop.getProperty("swn.dic.object"));
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "maxWindowSize", 5);
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "useStemToFindDic", Boolean.TRUE);
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "usePosToFindDic", Boolean.TRUE);
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "posTagset", "BROWN_CORPUS");
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "annotationTypeName", "com.maalaang.omtwitter.uima.type.SentiWordNetAnnotation");
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "featureNameId", "id");
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "featureNamePositiveScore", "positiveScore");
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "featureNameNegativeScore", "negativeScore");
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "featureNameSubjectiveScore", "subjectiveScore");
pipeline.setAnnotatorParameter("SentiWordNetAnnotator", "featureNameObjectiveScore", "objectiveScore");
pipeline.addAnnotator("TwitterSentimentScoreAnnotator", "com/maalaang/omtwitter/uima/annotator/uima-twitter-sentiment-score-annotator.xml");
pipeline.setAnnotatorParameter("TwitterSentimentScoreAnnotator", "sentiScoreDicObjectFile", prop.getProperty("tsc.dic.object"));
pipeline.addAnnotator("SvmSOClassificationAnnotator", "com/maalaang/omtwitter/uima/annotator/uima-svm-classification-annotator.xml");
pipeline.setAnnotatorParameter("SvmSOClassificationAnnotator", "svmModelFile", prop.getProperty("svm.so.model"));
pipeline.setAnnotatorParameter("SvmSOClassificationAnnotator", "svmFVFactoryClassName", "com.maalaang.omtwitter.uima.ml.SvmScoreSumUnigramExFVFactory");
pipeline.setAnnotatorParameter("SvmSOClassificationAnnotator", "svmTargetUpdatorClassName", "com.maalaang.omtwitter.uima.ml.SvmSOTargetUpdator");
pipeline.addAnnotator("SvmPNClassificationAnnotator", "com/maalaang/omtwitter/uima/annotator/uima-svm-classification-annotator.xml");
pipeline.setAnnotatorParameter("SvmPNClassificationAnnotator", "svmModelFile", prop.getProperty("svm.pn.model"));
pipeline.setAnnotatorParameter("SvmPNClassificationAnnotator", "svmFVFactoryClassName", "com.maalaang.omtwitter.uima.ml.SvmScoreSumUnigramExFVFactory");
pipeline.setAnnotatorParameter("SvmPNClassificationAnnotator", "svmTargetUpdatorClassName", "com.maalaang.omtwitter.uima.ml.SvmPNTargetUpdator");
pipeline.addAnnotator("CrfClassificationAnnotator", "com/maalaang/omtwitter/uima/annotator/uima-crf-classification-annotator.xml");
pipeline.setAnnotatorParameter("CrfClassificationAnnotator", "crfModelFile", prop.getProperty("crf.model"));
String annResultDir = prop.getProperty("annotation.result.dir", null);
if (annResultDir != null) {
pipeline.addConsumer("XmiWriteConsumer", "com/maalaang/omtwitter/uima/consumer/uima-xmi-write-consumer.xml");
pipeline.setConsumerParameter("XmiWriteConsumer", "outputDirectory", annResultDir);
}
pipeline.addConsumer("OMTwitterResultEvaluateConsumer", "com/maalaang/omtwitter/uima/consumer/uima-omtwitter-result-evaluate-consumer.xml");
pipeline.setConsumerParameter("OMTwitterResultEvaluateConsumer", "evaluationCorpusFile", prop.getProperty("omtwitter.eval.corpus.file"));
pipeline.setConsumerParameter("OMTwitterResultEvaluateConsumer", "evaluationCorpusDelim", prop.getProperty("omtwitter.eval.corpus.delim"));
pipeline.setConsumerParameter("OMTwitterResultEvaluateConsumer", "evaluationCorpusFields", prop.getProperty("omtwitter.eval.corpus.fields"));
pipeline.setConsumerParameter("OMTwitterResultEvaluateConsumer", "namedEntityTags", prop.getProperty("omtwitter.eval.corpus.ne.tags"));
pipeline.setConsumerParameter("OMTwitterResultEvaluateConsumer", "labelNone", prop.getProperty("omtwitter.eval.corpus.label.none"));
pipeline.setConsumerParameter("OMTwitterResultEvaluateConsumer", "printResult", Boolean.parseBoolean(prop.getProperty("omtwitter.eval.corpus.print.result")));
pipeline.run(true, "EvaluateAnalysisResult.xml");
} catch (InvalidXMLException e) {
e.printStackTrace();
} catch (ResourceConfigurationException e) {
e.printStackTrace();
} catch (ResourceInitializationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void addLibraryPath(String path) throws Exception {
Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");
usrPathsField.setAccessible(true);
String[] paths = (String[])usrPathsField.get(null);
for(String p : paths)
if(p.equals(path))
return;
String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
newPaths[newPaths.length-1] = path;
usrPathsField.set(null, newPaths);
}
}