/** * PrologAnnotator - UIMA Annotator for UIMA CAS Prolog predicates */ package prolog_cas; import java.util.Hashtable; import java.util.Vector; import jpl.Compound; import jpl.JPL; import jpl.Query; import org.apache.uima.UIMAFramework; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.cas.CAS; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; /** * @author Paul Fodor * */ public class PrologCASAnnotator extends JCasAnnotator_ImplBase { private static final String PARAM_RULE_FILE = "RuleFile"; private String ruleFileName; @Override public void initialize(UimaContext aUimaContext) throws ResourceInitializationException { // TODO Auto-generated method stub super.initialize(aUimaContext); ruleFileName = (String)aUimaContext.getConfigParameterValue(PARAM_RULE_FILE); } public void process(JCas aJCas){ CAS cas = aJCas.getCas(); Logger logger = UIMAFramework.getLogger(PrologCAS.class); logger.log(Level.ALL,"PrologCASAnnotator.process(JCas aJCas) started: "); System.out.println("PrologCASAnnotator.process(JCas aJCas) started: "); PrologCAS pCAS=PrologCAS.getInstance(ruleFileName); try { // transforms the CAS into prolog predicates Hashtable<String,Vector<String>> prologPredicates = pCAS.casToProlog(cas.getJCas()); // write the prolog translation to a file for debug purposes only String prologFileName=new String("../prolog_cas/prolog/cas.pl"); // writes the prolog predicates into a file if(prologFileName!=null){ pCAS.writeCasToPrologFile(prologPredicates, prologFileName); } // initialize the Prolog engine JPL.init(); // transfer the cas to Prolog pCAS.transferCasToProlog(prologPredicates); // query the file to get the new "FeatureStructure"s String queryRuleString=new String("queryPrologCas(L)"); String queryVariable=new String("L"); Query queryRule=new Query(queryRuleString); Compound result = (Compound)(queryRule.oneSolution().get(queryVariable)); // Retrieve the new feature structures from the Prolog result and add them into the cas pCAS.retrievePrologQueryResults(result,cas); } catch(Exception e) { e.printStackTrace(); } System.out.println("PrologCASAnnotator.process(JCas aJCas) ended. "); } }