@@ -54,6 +54,7 @@ def main(args = None):
54
54
parser .add_argument ("sem" )
55
55
parser .add_argument ("--arbi-types" , action = "store_true" , default = False )
56
56
parser .add_argument ("--gold_trees" , action = "store_true" , default = True )
57
+ parser .add_argument ("--nbest" , nargs = '?' , type = int , default = "1" )
57
58
args = parser .parse_args ()
58
59
59
60
if not os .path .exists (args .templates ):
@@ -71,27 +72,35 @@ def main(args = None):
71
72
root = etree .parse (args .ccg , parser )
72
73
73
74
for sentence in root .findall ('.//sentence' ):
74
- sem_node = etree .Element ('semantics' )
75
- try :
76
- sem_node .set ('status' , 'success' )
77
- tree_index = 1
78
- if args .gold_trees :
79
- tree_index = int (sentence .get ('gold_tree' , '0' )) + 1
80
- sem_tree = assign_semantics_to_ccg (
81
- sentence , semantic_index , tree_index )
82
- sem_node .set ('root' ,
83
- sentence .xpath ('./ccg[{0}]/@root' .format (tree_index ))[0 ])
84
- filter_attributes (sem_tree )
85
- sem_node .extend (sem_tree .xpath ('.//descendant-or-self::span' ))
86
- except LogicalExpressionException as e :
87
- sem_node .set ('status' , 'failed' )
88
- logging .error ('An error occurred: {0}' .format (e ))
89
- sentence .append (sem_node )
75
+ if args .gold_trees :
76
+ tree_indices = [int (sentence .get ('gold_tree' , '0' )) + 1 ]
77
+ if args .nbest != 1 :
78
+ tree_indices = get_tree_indices (sentence , args .nbest )
79
+ for tree_index in tree_indices :
80
+ sem_node = etree .Element ('semantics' )
81
+ sem_node .set ('ccg_id' ,
82
+ sentence .xpath ('./ccg[{0}]/@id' .format (tree_index ))[0 ])
83
+ try :
84
+ sem_node .set ('status' , 'success' )
85
+ sem_tree = assign_semantics_to_ccg (
86
+ sentence , semantic_index , tree_index )
87
+ sem_node .set ('root' ,
88
+ sentence .xpath ('./ccg[{0}]/@root' .format (tree_index ))[0 ])
89
+ filter_attributes (sem_tree )
90
+ sem_node .extend (sem_tree .xpath ('.//descendant-or-self::span' ))
91
+ except LogicalExpressionException as e :
92
+ sem_node .set ('status' , 'failed' )
93
+ logging .error ('An error occurred: {0}' .format (e ))
94
+ sentence .append (sem_node )
90
95
91
96
root_xml_str = serialize_tree (root )
92
97
with codecs .open (args .sem , 'wb' ) as fout :
93
98
fout .write (root_xml_str )
94
99
100
+ def get_tree_indices (sentence , nbest ):
101
+ num_ccg_trees = int (sentence .xpath ('count(./ccg)' ))
102
+ return list (range (1 , min (nbest , num_ccg_trees ) + 1 ))
103
+
95
104
keep_attributes = set (['id' , 'child' , 'sem' , 'type' ])
96
105
def filter_attributes (tree ):
97
106
if 'coq_type' in tree .attrib and 'child' not in tree .attrib :
0 commit comments