package ever.generic; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Set; 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 case frames which contain an active verb and an direct object. This is the most important analyzer! * @author Pol Schumacher, Wirtschaftsinformatik, Institut fuer Informatik, Goethe Universitaet Frankfurt */ public class LocalDirectObjectStartAnalyzer extends AbstractLocalInputAnalyzer { @Override public Case analyze(Case c) { Workflow wf = c.getWf(); if (wf == null) wf = new Workflow(); // Parent element is null, because workflow is not an workflow element Sequence seq = new Sequence(null,null); ArrayList senList = c.getSentences(); ArrayList taskList; HashMap> updates = new HashMap>(); for (int i = 0; i < senList.size(); i++) { Sentence s = senList.get(i); taskList = new ArrayList(); ArrayList cfList = s.getCaseFrames(); for (CaseFrame cf : cfList) { Task t = null; if (cf.getType().equals("ActVp_") & !cf.isNeg()) { t = new Task(seq,s); String name = cf.getTrigger().toLowerCase().trim(); String product = cf.getEx().toLowerCase().trim(); boolean youProduct=false; if (product.equals("you")) { youProduct = true; } t.setName(name); // t.addFacet(new SimpleFacet("Test","Direct")); t.addFacet(new SimpleFacet("Sentence", s.getRaw())); if (!youProduct) { try { t.addInProduct(new SimpleProduct(product, t.getId())); } catch (EmptyProductException e) { // do nothing // e.printStackTrace(); } catch (NotAProductException e) { // do nothing // e.printStackTrace(); } } taskList.add(t); } } for (Task t : taskList) { seq.addWfElement(t); s.addRelWfElement(t); } senList.set(i, s); wf.setTopSequence(seq); c.setWf(wf); } c.setWf(wf); return c; } @Override public HashMap analyze(HashMap c) { // throw new NotImplementedException(); return null; } @Override public void analyze() { // throw new NotImplementedException(); } private HashMap> addUpdate(Sentence s, WorkflowElement wfe, HashMap> updates) { if (updates.containsKey(s)) { ArrayList tmp = updates.get(s); tmp.add(wfe); updates.put(s, tmp); } else { ArrayList tmp = new ArrayList(); tmp.add(wfe); updates.put(s, tmp); } return updates; } }