001    package edu.upenn.cis.propbank_shen;
002    
003    import java.io.*;
004    import java.util.List;
005    import java.util.LinkedList;
006    
007    import org.w3c.dom.Node;
008    import org.w3c.dom.Attr;
009    import org.w3c.dom.NamedNodeMap;
010    
011    
012    /**
013       A class representing a "predicate" in the propbank frames.  A predicate
014       is either the root form of a verb, such as "go", or it is a phrasalized 
015       root form, such as "go on".
016    
017       Phrasalized forms have their parts joined by underscores.
018       @author Scott Cotton
019    */
020    public class Predicate {
021        /** the lemma (root form) associate with the predicate */
022        protected String lemma;
023        /** the node from the xml document used to create this Predicate object */
024        protected Node node;
025        /** a list of the rolesets associated with this predicate 
026         @see edu.upenn.cis.propbank_shen.RoleSet */
027        protected List rolesets;
028    
029        /** the separator for phasal parts, here '_', so "go on" would be "go_on" */
030        public static String phrasalSep = "_";
031    
032        /** construct a Predicate object from a predicate node in a frameset
033            xml document */
034        public Predicate(Node n) throws CorruptDataException
035        {
036            node = n;
037            lemma = null;
038            NamedNodeMap attrs = n.getAttributes();
039            int len = attrs.getLength();
040            for(int i=0; i<len; i++) {
041                Attr attr = (Attr) attrs.item(i);
042                if (attr.getNodeName().equals("lemma")) {
043                    lemma = attr.getNodeValue();
044                    break;
045                }
046            }
047            if (lemma == null) {
048                System.err.println("error with Predicate object, no lemma found");
049            }
050            rolesets = new LinkedList();
051            Node nc = node.getFirstChild();
052            while (nc != null) {
053                if (nc.getNodeName().equals("roleset")) {
054                    rolesets.add(new RoleSet(nc));
055                }
056                nc = nc.getNextSibling();
057            }
058        }
059        // XXX add constructor from string
060    
061        /** return the lemma associated with this Predicate object */
062        public String getLemma() 
063        {
064            return lemma;
065        }
066    
067        /** return true iff this Predicate object refers to a phrasal predicate */
068        public boolean isPhrasal() 
069        {
070            return lemma.indexOf(Predicate.phrasalSep) != -1;
071        }
072    
073        /** 
074            Return a list of the rolesets associated with this Predicate object.
075         */
076        public List getRoleSets()
077        {
078            return rolesets;
079        }
080    }