package werti.uima.ae; import java.rmi.RemoteException; import java.util.Iterator; import danbikel.lisp.Sexp; import danbikel.parser.Settings; import org.apache.log4j.Logger; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.JCasAnnotator_ImplBase; import org.apache.uima.cas.text.AnnotationIndex; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import werti.uima.types.annot.ConditionalSentence; import werti.uima.types.annot.Token; import werti.util.CasUtils; import werti.util.ParserClient; public class DBParser extends JCasAnnotator_ImplBase { private static final Logger log = Logger.getLogger(DBParser.class); private static ParserClient parser; @Override public void initialize(UimaContext context) throws ResourceInitializationException { Settings.set(Settings.decoderRelaxConstraintsAfterBeamWidening, "false"); System.err.printf("Memory: %s/%s\n" , Runtime.getRuntime().freeMemory()/1024/1024 , Runtime.getRuntime().totalMemory()/1024/1024); try { parser = new ParserClient(); } catch (RemoteException re) { log.fatal(re); } } @Override @SuppressWarnings("unchecked") public void process(JCas cas) { // stop processing if the client has requested it if (!CasUtils.isValid(cas)) { return; } final AnnotationIndex sindex = cas.getAnnotationIndex(ConditionalSentence.type); final AnnotationIndex tindex = cas.getAnnotationIndex(Token.type); for(final Iterator cit = sindex.iterator(); cit.hasNext(); ) { final ConditionalSentence sentence = cit.next(); final StringBuilder sexp = new StringBuilder(); sexp.append("("); for(final Iterator tit = tindex.subiterator(sentence); tit.hasNext(); ) { sexp.append(" "); final Token t = tit.next(); final String s = t.getCoveredText(); if (s.matches("\\w*")) { // strip punctuation //sexp.append("("+s+" ("+t.getTag()+"))"); // using external tagging sexp.append(s); // using parser's internal tagging } sexp.append(" "); } sexp.append(")"); try { final String s = sexp.toString(); log.debug("Parsing Sexp\n"+s); final Sexp parsed = parser.parse(Sexp.read((s)).list()); System.err.println(parsed); sentence.setSexp(parsed.toString()); } catch (Exception e) { log.fatal(e); } } } }