package ever.generic; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import ever.pipeline.AbstractLocalInputAnalyzer; import ever.pipeline.Case; import ever.pipeline.CaseFrame; import ever.pipeline.Sentence; import ever.workflowRepresentation.EmptyProductException; import ever.workflowRepresentation.NotAProductException; import ever.workflowRepresentation.Sequence; import ever.workflowRepresentation.SimpleFacet; import ever.workflowRepresentation.SimpleProduct; import ever.workflowRepresentation.Task; import ever.workflowRepresentation.Workflow; import ever.workflowRepresentation.WorkflowElement; /** * This analyzer looks for active verbs and objects which are linked with a prepostion. The preposition might result in a new task or in * a new facet * @author Pol Schumacher, Wirtschaftsinformatik, Institut fuer Informatik, Goethe Universitaet Frankfurt Input workflow must be flat */ public class LocalPrepTaskGenerator extends AbstractLocalInputAnalyzer { @Override public Case analyze(Case c) { Workflow wf = c.getWf(); Sequence seq = null; ArrayList taskList = new ArrayList(); if (wf == null) { wf = new Workflow(); seq = new Sequence(null, null); } else { seq = (Sequence) wf.getTopSequence(); } ArrayList senList = c.getSentences(); HashMap> updates = new HashMap>(); for (int i = 0; i < senList.size(); i++) { Sentence s = senList.get(i); ArrayList cfList = s.getCaseFrames(); taskList = new ArrayList(); if (cfList.size() == 0) continue; int pos = 0; try { pos = super.getNextRelated(senList, s, seq); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } for (CaseFrame cf : cfList) { Task t = null; if (cf.getType().equals("ActVp_Prep_") & !cf.isNeg()) { t = new Task(seq, s); t.setName(cf.getTrigger()); t.addRelSentence(s); // Add here for with types ingredients must be extracted if (cf.getPpType().equals("WITH") | cf.getPpType().equals("IN")) { try { t.addInProduct(new SimpleProduct(cf.getEx(), t .getId())); } catch (EmptyProductException e) { // TODO Auto-generated catch block } catch (NotAProductException e) { // TODO Auto-generated catch block } } t.addFacet(new SimpleFacet("Sentence", s.getRaw())); t.addFacet(new SimpleFacet("Test", "Prep")); // updates=addUpdate(s, t,updates); taskList.add(t); } else { continue; } } if (taskList.size() == 0) continue; // Put new task on the right position in sequence for (Task t : taskList) { ArrayList list = s.getRelatedElem(); // Get index of last task of the previous sentence int index = super.getNextRelated(senList, s, seq); seq.putElementAt(t, pos); s.addRelWfElement(t); senList.set(i, s); } } wf.setTopSequence(seq); c.setWf(wf); return c; } @Override public HashMap analyze(HashMap c) { // TODO Auto-generated method stub // throw new NotImplementedException(); return null; } @Override public void analyze() { // throw new NotImplementedException(); } }