package edu.berkeley.nlp.ling; import java.io.Serializable; import edu.berkeley.nlp.syntax.Tree; import edu.berkeley.nlp.util.Pair; /** * An interface for finding the "head" daughter of a phrase structure tree. * This could potentially be any sense of "head", but has mainly been used * to find the lexical head for lexicalized PCFG parsing. * * @author Christopher Manning */ public interface HeadFinder extends Serializable { /** * Determine which daughter of the current parse tree is the head. * It assumes that the daughters already have had their heads * determined. Another method has to do the tree walking. * * @param t The parse tree to examine the daughters of * @return The parse tree that is the head. The convention has been * that this returns <code>null</code> if no head is found. * But maybe it should throw an exception? */ public Tree<String> determineHead(Tree<String> t); public static class Utils { public static Pair<String, String> getHeadWordAndPartOfSpeechPair(HeadFinder hf, Tree<String> tree) { String headWord = null; String headPOS = null; while (true) { if (tree.isPreTerminal()) { headPOS = tree.getLabel(); } if (tree.isLeaf()) { headWord = tree.getLabel(); break; } tree = hf.determineHead(tree); } return Pair.newPair(headWord, headPOS); } } }