Go to the documentation of this file.00001
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
00009 self.score = score
00010 self.word = word
00011 self.word_index = word_index
00012 self.children = []
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
00035
00036
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):
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
00134 tree_array = []
00135 for node in squashed_tree.nodes:
00136 tree_array.append(_node_to_tree(node, squashed_tree))
00137
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:
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
00149 tree_array[parent_id].children.append(tree_array[i])
00150
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
00160 pass
00161
00162
00163