package de.unidue.ltl.escrito.examples.local.models; import java.io.File; import java.util.ArrayList; import java.util.List; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.fit.factory.AnalysisEngineFactory; import org.apache.uima.fit.factory.JCasFactory; import org.apache.uima.fit.util.JCasUtil; import org.apache.uima.jcas.JCas; import org.dkpro.tc.api.type.TextClassificationOutcome; import org.dkpro.tc.ml.model.PreTrainedModelProviderUnitMode; import de.unidue.ltl.escrito.core.types.LearnerAnswer; import de.unidue.ltl.escrito.examples.basics.Experiments_ImplBase; public class StoredModelPredictor extends Experiments_ImplBase{ public static final String LANG_CODE = "de"; public static void main(String[] args) { //String experimentName = "Me_n-SMO-C-1.0-NormalizedPolyKernel-E-3.0"; File modelOutputFolder = new File(TrainAndSaveModel.OUTPUT_DIR, args[0]); //String exampleAnswer = "Die Chromosomen, welche aus zwei Chromatiden bestehen, bewegen sich zum zentralen Ă„quator."; // GT = 1 //for debugging: System.out.println("Total number of arguments passed: " + args.length); for (int i = 0; i < args.length; i++) { System.out.println("Argument " + i + ": " + args[i]); } try { documentLoadModelSingleLabel(LANG_CODE, modelOutputFolder, args[1]); } catch (Exception e) { System.out.println("Exception while processing answer. Please verify the following:"); System.out.println("--> a) The correct name of an existing directory in " + TrainAndSaveModel.OUTPUT_DIR + " is passed as first argument."); System.out.println("--> b) A string representing the learner's answer to be classified is passed as second argument."); System.out.println("--> c) Both passed arguments are wrapped in double quotes: \"...\"."); e.printStackTrace(); } } // from de.unidue.ltl.escrito.examples.io.StoredModelApplicationExample private static void documentLoadModelSingleLabel(String languageCode, File modelOutputFile, String exampleAnswer) throws Exception { //System.out.println("Path to model: " + modelOutputFile.getAbsolutePath()); AnalysisEngine preprocessing = AnalysisEngineFactory.createEngine(Experiments_ImplBase.getPreprocessing(languageCode)); AnalysisEngine tcAnno = AnalysisEngineFactory.createEngine(PreTrainedModelProviderUnitMode.class, PreTrainedModelProviderUnitMode.PARAM_NAME_TARGET_ANNOTATION, LearnerAnswer.class, // Achtung: It seems like you MAY NOT use the class TextClassificationTarget (as we do in the reader) // to indicate the unit to be considered // as far as I can see, a TextClassifcationTarget is produced by the classifier and we only want to have one in the end! PreTrainedModelProviderUnitMode.PARAM_TC_MODEL_LOCATION, modelOutputFile.getAbsolutePath()); JCas jcas = JCasFactory.createJCas(); jcas.setDocumentText(exampleAnswer); jcas.setDocumentLanguage(languageCode); LearnerAnswer unit = new LearnerAnswer(jcas, 0, jcas.getDocumentText().length()); unit.addToIndexes(); // redo the preprocessing preprocessing.process(jcas); tcAnno.process(jcas); // redo the processing done by the classifier List outcomes = new ArrayList<>( JCasUtil.select(jcas, TextClassificationOutcome.class)); //System.out.println(jcas.getDocumentText()+"\nOutcome: "+outcomes.get(0).getOutcome()); System.out.println(outcomes.get(0).getOutcome()); // only print (binary) outcome } }