private Event getMainEvent(JCas jCas, Sentence sentence) { // group events by their depth, and record the minimum depth Integer minDepth = null; Map<Integer, List<Event>> depthEvents = new HashMap<Integer, List<Event>>(); for (Event event : JCasUtil.selectCovered(jCas, Event.class, sentence)) { TreebankNode node = TreebankNodeUtil.selectMatchingLeaf(jCas, event); Integer depth = node == null ? null : TreebankNodeUtil.getDepth(node); if (!depthEvents.containsKey(depth)) { depthEvents.put(depth, new ArrayList<Event>()); } depthEvents.get(depth).add(event); if (depth != null && (minDepth == null || depth < minDepth)) { minDepth = depth; } } // select the last event if (depthEvents.isEmpty()) { return null; } else { List<Event> events = depthEvents.get(minDepth); return events.get(events.size() - 1); } } }
private List<Event> getSubordinateEvents(JCas jCas, Event source, Sentence sentence) { List<Event> targets = new ArrayList<Event>(); TreebankNode sourceNode = TreebankNodeUtil.selectMatchingLeaf(jCas, source); for (Event target : JCasUtil.selectCovered(jCas, Event.class, sentence)) { if (!target.equals(source)) { TreebankNode targetNode = TreebankNodeUtil.selectMatchingLeaf(jCas, target); if (sourceNode != null && targetNode != null) { String path = noLeavesPath(TreebankNodeUtil.getPath(sourceNode, targetNode)); if (SUBORDINATE_PATH_PATTERN.matcher(path).matches()) { targets.add(target); } } } } return targets; } }
private static List<Time> getSubordinateTimes(Event event, Sentence sentence, JCas jCas) { List<Time> times = new ArrayList<Time>(); TreebankNode eventNode = selectMatchingLeaf(jCas, event); for (Time time : JCasUtil.selectCovered(jCas, Time.class, sentence)) { TreebankNode timeNode = selectHighestCoveredTreebankNode(jCas, time); if (eventNode != null && timeNode != null) { String path = noLeavesPath(TreebankNodeUtil.getPath(eventNode, timeNode)); if (SUBORDINATE_PATH_PATTERN.matcher(path).matches()) { times.add(time); } } } return times; } }
public List<Feature> extract(JCas jCas, T source, U target) { List<Feature> features = new ArrayList<Feature>(); TreebankNode sourceNode = TreebankNodeUtil.selectMatchingLeaf(jCas, source); TreebankNode targetNode = TreebankNodeUtil.selectMatchingLeaf(jCas, target); if (sourceNode != null && targetNode != null) { TreebankNodePath path = TreebankNodeUtil.getPath(sourceNode, targetNode); TreebankNode ancestor = path.getCommonAncestor(); features.add(new Feature("CommonAncestor", ancestor == null ? null : ancestor.getNodeType())); features.add(new Feature("SourceToAncestor", pathString(path.getSourceToAncestorPath()))); features.add(new Feature("TargetToAncestor", pathString(path.getTargetToAncestorPath()))); } return features; }
@Override public List<Feature> extract(JCas view, T focusAnnotation) { List<Feature> features = new ArrayList<Feature>(); TreebankNode node = TreebankNodeUtil.selectMatchingLeaf(view, focusAnnotation); if (node != null) { node = node.getParent(); } if (node != null) { node = node.getParent(); } if (node != null) { node = node.getChildren(0); } if (node != null && node.getLeaf()) { features.add(new Feature(this.featureName, node.getCoveredText())); } return features; } }
@Override public List<Feature> extract(JCas view, Token token) throws CleartkExtractorException { TreebankNode node = TreebankNodeUtil.selectMatchingLeaf(view, token); List<Feature> features = new ArrayList<Feature>(); if (node != null) { TreebankNode parent = node.getParent(); if (parent != null) { features.add(new Feature("ParentNodeType", parent.getNodeType())); TreebankNode firstSibling = parent.getChildren(0); if (firstSibling != node && firstSibling.getLeaf()) { features.add(new Feature("FirstSiblingText", firstSibling.getCoveredText())); } } } return features; } }