static public DEPTree toDEPTree(List<String> tokens) { DEPTree tree = new DEPTree(); int i, size = tokens.size(); for (i=0; i<size; i++) tree.add(new DEPNode(i+1, tokens.get(i))); return tree; }
/** * Constructs a dependency tree. * An artificial root node gets inserted automatically. */ public DEPTree() { DEPNode root = new DEPNode(); root.initRoot(); add(root); }
static public DEPTree toDEPTree(POSNode[] nodes) { DEPTree tree = new DEPTree(); int i, size = nodes.length; for (i=0; i<size; i++) tree.add(new DEPNode(i+1, nodes[i])); return tree; } }
/** Inserts the specific node to this tree. */ public boolean insertNode(int index, DEPNode node) { try { add(index, node); reassignIDs(index); return true; } catch (IndexOutOfBoundsException e) { e.printStackTrace(); return false; } }
/** Called by {@link LGAsk#generateQuestionFromAsk(DEPTree, String)}. */ private DEPNode addDoAuxiliary(DEPTree tree, DEPNode verb, DEPNode head) { DEPNode aux; if (verb.isPos(CTLibEn.POS_VBZ)) tree.add(aux = getNode(head, ENAux.DOES, ENAux.DO, verb.pos, DEPLibEn.DEP_AUX, null)); else if (verb.isPos(CTLibEn.POS_VBD) || verb.isPos(CTLibEn.POS_VBN)) tree.add(aux = getNode(head, ENAux.DID , ENAux.DO, CTLibEn.POS_VBD, DEPLibEn.DEP_AUX, null)); else tree.add(aux = getNode(head, ENAux.DO , ENAux.DO, verb.pos, DEPLibEn.DEP_AUX, null)); toNonFinite(verb); return aux; }
/** Generates a question from a declarative sentence. */ public DEPTree generateQuestionFromDeclarative(DEPNode root, boolean convertUnI) { DEPTree tree = new DEPTree(); for (DEPNode node : root.getSubNodeSortedList()) tree.add(node); return generateQuestionFromDeclarative(tree, convertUnI); }
/** {@link LGAsk#generateAskFromQuestion(DEPTree, String)}. */ private void addPrefix(DEPTree tree, DEPNode verb, DEPNode ref) { DEPNode ask = getNode(tree.get(0), "Ask", "ask", CTLibEn.POS_VB, DEPLibEn.DEP_ROOT, null); verb.setHead(ask); tree.add(1, ask); if (ref == null && !hasRelativizer(tree) && !DEPLibEn.containsRelativizer(verb)) { DEPNode complm = getNode(verb, "whether", "whether", CTLibEn.POS_IN, DEPLibEn.DEP_COMPLM, null); tree.add(2, complm); } }
@Override public void process(JCas jCas) throws AnalysisEngineProcessException { for (Sentence sentence : JCasUtil.select(jCas, Sentence.class)) { List<BaseToken> tokens = JCasUtil.selectCovered(jCas, BaseToken.class, sentence); DEPTree tree = new DEPTree(); // Convert CAS data into structures usable by ClearNLP for (int i = 0; i < tokens.size(); i++) { BaseToken token = tokens.get(i); DEPNode node = new DEPNode(i+1, token.getCoveredText()); tree.add(node); } // Run parser and convert output back to CAS friendly data types postagger.process(tree); for (int i = 0; i < tokens.size(); i++) { BaseToken token = tokens.get(i); DEPNode node = tree.get(i+1); token.setPartOfSpeech(node.pos); } } } }
/** Called by {@link LGAsk#generateQuestionFromAsk(DEPTree, String)}. */ private void resetDEPTreePost(DEPTree tree, DEPNode root) { root.setHead(tree.get(0), DEPLibEn.DEP_ROOT); String end = STPunct.QUESTION_MARK; String vtype; if ((vtype = root.getFeat(DEPLib.FEAT_VERB_TYPE)) != null && vtype.equals(NON_FINITE)) { tree.add(1, getNode(root, PLEASE, PLEASE, CTLibEn.POS_UH, DEPLibEn.DEP_INTJ, SRLLib.ARGM_DIS)); end = STPunct.PERIOD; } DEPNode last = root.getLastNode(); if (last.isPos(CTLibEn.POS_PERIOD)) { last.form = end; last.lemma = end; } else tree.add(getNode(root, end, end, CTLibEn.POS_PERIOD, DEPLibEn.DEP_PUNCT, null)); }
/** Called by {@link LGAsk#generateQuestionFromAsk(DEPTree, String)}. */ private void setRest(DEPTree tree, DEPNode verb, Set<DEPNode> added) { for (DEPNode node : verb.getSubNodeSortedList()) { if (added.contains(node)) continue; else if (node.isDependentOf(verb) && (node.isPos(CTLibEn.POS_TO) || node.isLabel(DEPLibEn.DEP_COMPLM) || node.isLabel(DEPLibEn.DEP_MARK))) continue; else tree.add(node); } }
@Override public void process(JCas jCas) throws AnalysisEngineProcessException { for (Sentence sentence : JCasUtil.select(jCas, Sentence.class)) { List<BaseToken> tokens = JCasUtil.selectCovered(jCas, BaseToken.class, sentence); DEPTree tree = new DEPTree(); // Convert CAS data into structures usable by ClearNLP for (int i = 0; i < tokens.size(); i++) { BaseToken token = tokens.get(i); DEPNode node = new DEPNode(i+1, token.getCoveredText()); tree.add(node); } // Run parser and convert output back to CAS friendly data types postagger.process(tree); for (int i = 0; i < tokens.size(); i++) { BaseToken token = tokens.get(i); DEPNode node = tree.get(i+1); token.setPartOfSpeech(node.pos); } } } }
private void addPeriod(DEPTree tree, DEPNode root) { DEPNode last = tree.get(tree.size()-1); if (last.isPos(CTLibEn.POS_PERIOD)) last.form = last.lemma = STPunct.PERIOD; else tree.add(getNode(root, STPunct.PERIOD, STPunct.PERIOD, CTLibEn.POS_PERIOD, DEPLibEn.DEP_PUNCT, null)); }
/** {@link LGAsk#generateAskFromQuestion(DEPTree, String)}. */ private void convertYouToUser(DEPTree tree, DEPNode head) { if (head.isLemma(ENPronoun.YOU) || head.isLemma(ENPronoun.YOURSELF)) { head.form = head.lemma = USER; head.pos = CTLibEn.POS_NN; matchUserVerb(head); tree.add(tree.indexOf(head), getNode(head, STConstant.THE, STConstant.THE, CTLibEn.POS_DT, DEPLibEn.DEP_DET, null)); } else if (head.isLemma(ENPronoun.YOUR) || head.isLemma(ENPronoun.YOURS)) { int idx = tree.indexOf(head); head.form = head.lemma = USER; head.pos = CTLibEn.POS_NN; tree.add(idx , getNode(head, STConstant.THE, STConstant.THE, CTLibEn.POS_DT, DEPLibEn.DEP_DET, null)); tree.add(idx+2, getNode(head, STConstant.APOSTROPHE_S, STConstant.APOSTROPHE_S, CTLibEn.POS_POS, DEPLibEn.DEP_POSSESSIVE, null)); } for (DEPArc arc : head.getDependents()) convertYouToUser(tree, arc.getNode()); }
/** {@link LGAsk#generateAskFromQuestion(DEPTree, String)}. */ private void relocateAuxiliary(DEPTree tree, DEPNode verb) { List<DEPNode> auxes = new ArrayList<DEPNode>(); DEPNode sbj = null; for (DEPArc arc : verb.getDependents()) { if (arc.isLabel(DEPLibEn.P_AUX)) auxes.add(arc.getNode()); else if (arc.isLabel(DEPLibEn.P_SBJ)) sbj = arc.getNode(); } if (sbj != null) { if (!auxes.isEmpty() && auxes.get(0).id < sbj.id) { relocateAuxiliaryAux(tree, verb, auxes, sbj); } else if (verb.isLemma(ENAux.BE) && verb.id < sbj.id) { tree.remove(verb); tree.add(sbj.getLastNode().id, verb); setBeVerbForm(verb, sbj); } } }
@Override public void process(JCas jCas) throws AnalysisEngineProcessException { for (Sentence sentence : JCasUtil.select(jCas, Sentence.class)) { List<BaseToken> printableTokens = new ArrayList<>(); for(BaseToken token : JCasUtil.selectCovered(jCas, BaseToken.class, sentence)){ if(token instanceof NewlineToken) continue; printableTokens.add(token); } if ( printableTokens.isEmpty() ) { // If there are no printable tokens then #convert fails continue; } DEPTree tree = new DEPTree(); // Convert CAS data into structures usable by ClearNLP for (int i = 0; i < printableTokens.size(); i++) { BaseToken token = printableTokens.get(i); String lemma = useLemmatizer ? lemmatizer.getLemma(token.getCoveredText(), token.getPartOfSpeech()) : token.getNormalizedForm(); DEPNode node = new DEPNode(i+1, token.getCoveredText(), lemma, token.getPartOfSpeech(), new DEPFeat()); tree.add(node); } // Run parser and convert output back to CAS friendly data types parser.process(tree); ArrayList<ConllDependencyNode> nodes = ClearDependencyUtility.convert( jCas, tree, sentence, printableTokens ); DependencyUtility.addToIndexes( jCas, nodes ); } }
/** @return the dependency tree converted from the specific constituent tree without head information. */ protected DEPTree initDEPTree(CTTree cTree) { DEPTree dTree = new DEPTree(); String form, lemma, pos; DEPNode dNode; int id; for (CTNode node : cTree.getTokens()) { id = node.getTokenId() + 1; form = MPLib.revertBracket(node.form); lemma = AbstractColumnReader.BLANK_COLUMN; pos = node.pTag; dNode = new DEPNode(id, form, lemma, pos, node.c2d.d_feats); dTree.add(dNode); } dTree.initXHeads(); return dTree; }
public DEPTree getNullTree() { DEPTree tree = new DEPTree(); DEPNode dummy = new DEPNode(1, "NULL", "NULL", "NULL", new DEPFeat()); dummy.setHead(tree.get(0), "NULL"); tree.add(dummy); tree.initXHeads(); tree.initSHeads(); return tree; }
private DEPTree getNullTree() { DEPTree tree = new DEPTree(); DEPNode dummy = new DEPNode(1, "NULL", "NULL", "NULL", new DEPFeat()); dummy.setHead(tree.get(0), "NULL"); tree.add(dummy); tree.initXHeads(); tree.initSHeads(); return tree; }
tree.add(node); if (node.isDependentOf(root)) node.setHead(tree.get(0), DEPLibEn.DEP_ROOT);
public DEPTree getDEPTreeWithoutEdited(CTTree cTree, DEPTree dTree) { IntOpenHashSet set = new IntOpenHashSet(); addEditedTokensAux(cTree.getRoot(), set); int i, j, size = dTree.size(); DEPTree tree = new DEPTree(); DEPNode node; for (i=1,j=1; i<size; i++) { if (!set.contains(i)) { node = dTree.get(i); node.id = j++; removeEditedHeads(node.getXHeads(), set); removeEditedHeads(node.getSHeads(), set); tree.add(node); } } return (tree.size() == 1) ? null : tree; }