stanford_parser_msgs_lib.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 import roslib; roslib.load_manifest('stanford_parser_msgs')
00003 import rospy
00004 import stanford_parser_msgs.msg
00005 
00006 class Tree:
00007     def __init__(self, tag, score, word, word_index):
00008         self.tag        = tag        # A string
00009         self.score      = score      # A double
00010         self.word       = word       # A string
00011         self.word_index = word_index # An integer, which is the index of the word in words[] (in Parse/SquashedParseTree)
00012         self.children   = []         # An array of Trees
00013 
00014     def __repr__(self):
00015         strlist = [self._node_repr() +
00016                    " -> " +
00017                    ' '.join(map(lambda child: child._node_repr(), self.children))]
00018         for child in self.children:
00019             strlist.append(child.__repr__())
00020         return '\n'.join(strlist)
00021 
00022     def _node_repr(self):
00023         return ('[' +
00024                 ', '.join([str(self.tag),
00025                            self.word if self.word else "(No word)",
00026                            str(self.score)]) +
00027                 ']')
00028 
00029 
00030 
00031 
00032 def _node_to_tree(node, squashed_tree):
00033     tag = False
00034     # Get tag as a string
00035     # De-Sanitize: '_S' -> '$', '_' -> '-'
00036     # TODO(bthomas): This step may be replicating some amount of code, ie bad.
00037     if   node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.ROOT: tag = "ROOT"
00038     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.ADJP: tag = "ADJP"
00039     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._ADV: tag = "-ADV"
00040     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.ADVP: tag = "ADVP"
00041     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._BNF: tag = "-BNF"
00042     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.CC: tag = "CC"
00043     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.CD: tag = "CD"
00044     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._CLF: tag = "-CLF"
00045     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._CLR: tag = "-CLR"
00046     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.CONJP: tag = "CONJP"
00047     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._DIR: tag = "-DIR"
00048     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.DT: tag = "DT"
00049     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._DTV: tag = "-DTV"
00050     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.EX: tag = "EX"
00051     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._EXT: tag = "-EXT"
00052     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.FRAG: tag = "FRAG"
00053     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.FW: tag = "FW"
00054     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._HLN: tag = "-HLN"
00055     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.IN: tag = "IN"
00056     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.INTJ: tag = "INTJ"
00057     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.JJ: tag = "JJ"
00058     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.JJR: tag = "JJR"
00059     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.JJS: tag = "JJS"
00060     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._LGS: tag = "-LGS"
00061     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._LOC: tag = "-LOC"
00062     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.LS: tag = "LS"
00063     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.LST: tag = "LST"
00064     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.MD: tag = "MD"
00065     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._MNR: tag = "-MNR"
00066     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.NAC: tag = "NAC"
00067     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.NN: tag = "NN"
00068     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.NNS: tag = "NNS"
00069     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.NNP: tag = "NNP"
00070     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.NNPS: tag = "NNPS"
00071     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._NOM: tag = "-NOM"
00072     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.NP: tag = "NP"
00073     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.NX: tag = "NX"
00074     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.PDT: tag = "PDT"
00075     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.POS: tag = "POS"
00076     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.PP: tag = "PP"
00077     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._PRD: tag = "-PRD"
00078     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.PRN: tag = "PRN"
00079     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.PRP: tag = "PRP"
00080     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._PRP: tag = "-PRP"
00081     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.PRP_S: tag = "PRP$"
00082     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.PRT: tag = "PRT"
00083     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._PUT: tag = "-PUT"
00084     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.QP: tag = "QP"
00085     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.RB: tag = "RB"
00086     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.RBR: tag = "RBR"
00087     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.RBS: tag = "RBS"
00088     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.RP: tag = "RP"
00089     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.RRC: tag = "RRC"
00090     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.S: tag = "S"
00091     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.SBAR: tag = "SBAR"
00092     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.SBARQ: tag = "SBARQ"
00093     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._SBJ: tag = "-SBJ"
00094     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.SINV: tag = "SINV"
00095     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.SQ: tag = "SQ"
00096     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.SYM: tag = "SYM"
00097     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._TMP: tag = "-TMP"
00098     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.TO: tag = "TO"
00099     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._TPC: tag = "-TPC"
00100     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._TTL: tag = "-TTL"
00101     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.UCP: tag = "UCP"
00102     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.UH: tag = "UH"
00103     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.VB: tag = "VB"
00104     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.VBD: tag = "VBD"
00105     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.VBG: tag = "VBG"
00106     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.VBN: tag = "VBN"
00107     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.VBP: tag = "VBP"
00108     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.VBZ: tag = "VBZ"
00109     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode._VOC: tag = "-VOC"
00110     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.VP: tag = "VP"
00111     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.WDT: tag = "WDT"
00112     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.WHADJP: tag = "WHADJP"
00113     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.WHADVP: tag = "WHADVP"
00114     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.WHNP: tag = "WHNP"
00115     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.WHPP: tag = "WHPP"
00116     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.WP: tag = "WP"
00117     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.WP_S: tag = "WP$"
00118     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.WRB: tag = "WRB"
00119     elif node.tag == stanford_parser_msgs.msg.SquashedParseTreeNode.X: tag = "X"
00120     elif 0 <= node.tag < len(squashed_tree.tags): # In squashed_tree.tags
00121         tag = squashed_tree.tags[node.tag]
00122     else:
00123         rospy.logerr("squashed_tree tag " + str(node.tag) + " not found!  Returning False.")
00124         return False
00125     return Tree(tag,
00126                 node.score,
00127                 squashed_tree.words[node.word_index] if node.word_index >= 0 else False,
00128                 node.word_index)
00129 
00130 
00131 
00132 def unsquash_tree(squashed_tree):
00133     # Add all elements to the tree, minus the children
00134     tree_array = []
00135     for node in squashed_tree.nodes:
00136         tree_array.append(_node_to_tree(node, squashed_tree))
00137     # Now add all children relations
00138     root_id = -1
00139     for i in range(len(squashed_tree.nodes)):
00140         parent_id = squashed_tree.nodes[i].parent_id
00141         if parent_id < 0: # found root
00142             if root_id < 0:
00143                 root_id = i
00144             else:
00145                 rospy.logerr("More than 1 root found in squashed tree!  Returning False.")
00146                 return False
00147         else:
00148             # Find the node's parent in the tree_array, and add the node as a child to its parent.
00149             tree_array[parent_id].children.append(tree_array[i])
00150     # Sanity: We have a root
00151     if root_id < 0:
00152         rospy.logerr("No root found in squashed tree!  Returning False.")
00153         return False
00154     return tree_array[root_id]
00155 
00156 
00157 
00158 if __name__ == '__main__':
00159     # TODO: Run unit tests here
00160     pass
00161 
00162 
00163 


stanford_parser_msgs
Author(s): Brian Thomas
autogenerated on Fri Dec 6 2013 20:37:07