use of edu.stanford.nlp.ling.MapLabel in project lucida by claritylab.
the class StanfordParser method mapOffsets.
/**
* Maps Tree node offsets using provided mapping.
* @param tree the Tree whose begin and end extents should be mapped.
* @param mapping the list of RangeMap objects which defines the mapping.
*/
protected static void mapOffsets(Tree tree, List<RangeMap> mapping) {
// if mapping is empty, then assume 1-to-1 mapping.
if (mapping == null || mapping.size() == 0)
return;
int begin_map_index = 0;
RangeMap begin_rmap = mapping.get(begin_map_index);
TREE: for (Tree t : tree) {
if (t.isLeaf())
continue;
MapLabel label = (MapLabel) t.label();
int begin = (Integer) label.get(BEGIN_KEY);
// "end" must be index of last char in range
int end = (Integer) label.get(END_KEY) - 1;
// annotation.begin");
while (begin_rmap.end <= begin) {
begin_map_index++;
if (begin_map_index >= mapping.size())
break TREE;
begin_rmap = mapping.get(begin_map_index);
}
// mapping is 1-to-1).
if (begin_rmap.begin > end) {
// mapping)");
continue;
}
// if beginning of current annotation falls within current range
// map, then map it back to source space.
int new_begin = begin;
if (begin_rmap.begin <= new_begin) {
// log.debug("Applying RangeMap to begin offset");
new_begin = begin_rmap.map(new_begin);
}
// find the first rangemap whose end is greater than the end of
// current annotation.
// log.debug("Finding RangeMap whose extents include
// annotation.end");
int end_map_index = begin_map_index;
RangeMap end_rmap = begin_rmap;
END_OFFSET: while (end_rmap.end <= end) {
end_map_index++;
if (end_map_index >= mapping.size())
break END_OFFSET;
end_rmap = mapping.get(end_map_index);
}
// if end of current annotation falls within "end" range map,
// then map it back to source space.
int new_end = end;
if (end_rmap.begin <= end) {
// log.debug("Applying RangeMap to end offset");
new_end = end_rmap.map(end);
}
label.put(BEGIN_KEY, new_begin);
label.put(END_KEY, new_end + 1);
}
}
use of edu.stanford.nlp.ling.MapLabel in project lucida by claritylab.
the class StanfordParser method updateTreeLabels.
protected static void updateTreeLabels(Tree root, Tree tree, MutableInteger offset, MutableInteger leafIndex) {
if (tree.isLeaf()) {
leafIndex.value++;
return;
}
String labelValue = tree.label().value().toUpperCase();
int begin = root.leftCharEdge(tree);
int end = root.rightCharEdge(tree);
//System.out.println(labelValue+"("+begin+","+end+")");
int length = end - begin;
// apply offset to begin extent
begin += offset.value;
// calculate offset delta based on label
if (double_quote_lable_pattern.matcher(labelValue).matches() && length > 1) {
offset.value--;
log.debug("Quotes label pattern fired: " + offset);
} else if (bracket_label_pattern.matcher(labelValue).matches()) {
offset.value -= 4;
log.debug("Bracket label pattern fired: " + offset);
} else if (tree.isPreTerminal()) {
Tree leaf = tree.firstChild();
String text = leaf.label().value();
Matcher matcher = escaped_char_pattern.matcher(text);
while (matcher.find()) {
offset.value--;
}
}
for (Tree child : tree.children()) updateTreeLabels(root, child, offset, leafIndex);
// apply offset to end extent
end += offset.value;
// set begin and end offsets on node
MapLabel label = new MapLabel(tree.label());
label.put(BEGIN_KEY, begin);
label.put(END_KEY, end);
label.put(MapLabel.INDEX_KEY, leafIndex.value);
tree.setLabel(label);
}
Aggregations