// ---------- Meg's Dependency Path features. ---------- public void addLexicalDependencyPathFeatures(int pidx, int aidx, ArrayList<String> feats) { FeaturizedToken predObject = getFeatureObject(pidx); FeaturizedToken argObject = getFeatureObject(aidx); FeaturizedTokenPair predArgPathObject = getFeatureObject(pidx, aidx); List<Pair<Integer, Dir>> dependencyPath = predArgPathObject.getDependencyPath(); String feat; ArrayList<String> depRelPathWord = new ArrayList<String>(); ArrayList<FeaturizedToken> dependencyPathObjectList = getFeatureObjectList(dependencyPath); for (FeaturizedToken t : dependencyPathObjectList) { depRelPathWord.add(t.getForm()); } feat = buildString(depRelPathWord); feats.add(feat); feat = buildString(bag(depRelPathWord)); feats.add(feat); }
public void addZhaoPairFeatures(int pidx, int aidx, ArrayList<String> feats) { /* NOTE: Not sure about they're "Semantic Connection" features. * What do they correspond to in CoNLL data? * From paper: "This includes semantic head (semhead), left(right) farthest(nearest) * semantic child (semlm, semln, semrm, semrn). * We say a predicate is its argument's semantic head, and the latter is the former's child. * Features related to this type may track the current semantic parsing status." * If a semantic predicate is given, then the SRL task is moot... */ FeaturizedToken pred = getFeatureObject(pidx); FeaturizedToken arg = getFeatureObject(aidx); FeaturizedTokenPair predArgPair = getFeatureObject(pidx, aidx); FeaturizedToken predLast = getFeatureObject(pidx - 1); FeaturizedToken predNext = getFeatureObject(pidx + 1); // FeatureObject predParent = getFeatureObject(pred.getParent()); FeaturizedToken argLast = getFeatureObject(aidx - 1); FeaturizedToken argNext = getFeatureObject(aidx + 1); FeaturizedToken argParent = getFeatureObject(arg.getParent()); ArrayList<Integer> predChildren = pred.getChildren(); ArrayList<Integer> argChildren = arg.getChildren(); List<Pair<Integer, Dir>> dependencyPath = predArgPair.getDependencyPath(); // Initialize Path structures. // List<Pair<Integer, Dir>> dpPathPred = predArgPair.getDpPathPred(); List<Pair<Integer, Dir>> dpPathArg = predArgPair.getDpPathArg(); ArrayList<Integer> linePath = predArgPair.getLinePath(); ArrayList<FeaturizedToken> predChildrenObjectList = getFeatureObjectList(predChildren); ArrayList<FeaturizedToken> argChildrenObjectList = getFeatureObjectList(argChildren); ArrayList<FeaturizedToken> dependencyPathObjectList = getFeatureObjectList(dependencyPath); ArrayList<FeaturizedToken> linePathCoNLL = getFeatureObjectList(linePath); // Add the supervised features if (prm.withSupervision) { addZhaoSupervisedPredFeats(pred, arg, predLast, predNext, predChildrenObjectList, feats); addZhaoSupervisedArgFeats( pred, arg, predLast, predNext, argLast, argNext, argParent, argChildrenObjectList, feats); addZhaoSupervisedCombinedFeats( pred, arg, feats, dependencyPathObjectList, linePathCoNLL, dpPathArg); } // Add the unsupervised features addZhaoUnsupervisedPredFeats(pred, predLast, predNext, feats); addZhaoUnsupervisedArgFeats(arg, argLast, argNext, argChildrenObjectList, feats); addZhaoUnsupervisedCombinedFeats(linePath, linePathCoNLL, feats); }
private void addBjorkelundPathFeats(FeaturizedTokenPair predArgPair, ArrayList<String> feats) { String feat; List<Pair<Integer, Dir>> dependencyPath = predArgPair.getDependencyPath(); // DeprelPath: the path from predicate to argument concatenating dependency labels with the // direction of the edge, e.g. OBJ↑OPRD↓SUB↓. ArrayList<String> depRelPath = new ArrayList<String>(); // POSPath: same as DeprelPath, but dependency labels are exchanged for POS tags, e.g. // NN↑NNS↓NNP↓. ArrayList<String> posPath = new ArrayList<String>(); ArrayList<FeaturizedToken> dependencyPathObjectList = getFeatureObjectList(dependencyPath); for (int i = 0; i < dependencyPathObjectList.size(); i++) { FeaturizedToken t = dependencyPathObjectList.get(i); depRelPath.add(t.getDeprel() + ":" + dependencyPath.get(i).get2()); posPath.add(t.getPos() + ":" + dependencyPath.get(i).get2()); } feat = buildString(depRelPath); feats.add("DeprelPath:" + feat); feat = buildString(posPath); feats.add("PosPath:" + feat); }