/** * */ package com.maalaang.omtwitter.uima.annotator; import java.io.File; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import com.maalaang.omtwitter.ml.SvmClassifier; import com.maalaang.omtwitter.ml.SvmFeatureVector; import com.maalaang.omtwitter.uima.ml.SvmFVFactory; import com.maalaang.omtwitter.uima.ml.SvmTargetUpdator; /** * @author Sangwon Park * */ public class SvmClassificationAnnotator extends JCasAnnotator_ImplBase { private static final String PARAM_SVM_MODEL_FILE = "svmModelFile"; private static final String PARAM_SVM_FV_FACTORY_CLASS_NAME = "svmFVFactoryClassName"; private static final String PARAM_SVM_TARGET_UPDATOR_CLASS_NAME = "svmTargetUpdatorClassName"; private Logger logger = null; private SvmFVFactory fvFactory = null; private SvmTargetUpdator targetUpdator = null; private SvmClassifier svmClassifier = null; @Override public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); logger = aContext.getLogger(); try { Class<?> fvFactoryClass = Class.forName((String) aContext.getConfigParameterValue(PARAM_SVM_FV_FACTORY_CLASS_NAME)); fvFactory = (SvmFVFactory) fvFactoryClass.newInstance(); Class<?> targetUpdatorClass = Class.forName((String) aContext.getConfigParameterValue(PARAM_SVM_TARGET_UPDATOR_CLASS_NAME)); targetUpdator = (SvmTargetUpdator) targetUpdatorClass.newInstance(); } catch (Exception e) { logger.log(Level.SEVERE, e.getMessage()); throw new ResourceInitializationException(e); } try { svmClassifier = new SvmClassifier((String) aContext.getConfigParameterValue(PARAM_SVM_MODEL_FILE)); } catch (Exception e) { logger.log(Level.SEVERE, e.getMessage()); throw new ResourceInitializationException(e); } } /* (non-Javadoc) * @see org.apache.uima.analysis_component.JCasAnnotator_ImplBase#process(org.apache.uima.jcas.JCas) */ @Override public void process(JCas aJCas) throws AnalysisEngineProcessException { SvmFeatureVector fv = fvFactory.createFeatureVectorFromJCas(aJCas); double d = 0.0; if (targetUpdator.classificationRequired(aJCas)) { d = svmClassifier.classify(fv); } targetUpdator.updateTargetInJCas(aJCas, d); } }