use of org.corpus_tools.salt.common.SSpan in project ANNIS by korpling.
the class TimelineReconstructor method addTimeline.
private void addTimeline() {
STimeline timeline = graph.createTimeline();
for (SToken virtualTok : graph.getSortedTokenByText()) {
timeline.increasePointOfTime();
// find all spans that are connected to this token and are part of an SOrderRelation
for (SRelation<?, ?> inRel : virtualTok.getInRelations()) {
if (inRel instanceof SSpanningRelation) {
SSpanningRelation spanRel = (SSpanningRelation) inRel;
SSpan overlappingSpan = spanRel.getSource();
if (overlappingSpan != null) {
spans2TimelinePos.put(overlappingSpan, timeline.getEnd());
}
}
}
nodesToDelete.add(virtualTok);
}
}
use of org.corpus_tools.salt.common.SSpan in project ANNIS by korpling.
the class TimelineReconstructor method createTokenFromSOrder.
private void createTokenFromSOrder() {
nodesToDelete.add(graph.getTextualDSs().get(0));
Map<String, SSpan> rootNodes = new HashMap<>();
// also add nodes that are are marked as start by ANNIS even if they don't have an outgoing order rel
for (SSpan n : graph.getSpans()) {
SFeature feat = n.getFeature(AnnisConstants.ANNIS_NS, AnnisConstants.FEAT_FIRST_NODE_SEGMENTATION_CHAIN);
if (feat != null && feat.getValue_STEXT() != null) {
rootNodes.put(feat.getValue_STEXT(), n);
} else {
// check if there is no incoming SOrderRelation but an outgoing
boolean isRoot = true;
for (SRelation<?, ?> inRel : n.getInRelations()) {
if (inRel instanceof SOrderRelation) {
isRoot = false;
break;
}
}
if (isRoot) {
for (SRelation<?, ?> outRel : n.getOutRelations()) {
if (outRel instanceof SOrderRelation) {
rootNodes.put(((SOrderRelation) outRel).getType(), n);
break;
}
}
}
}
}
// convert all root nodes to spans
for (Map.Entry<String, SSpan> rootEntry : rootNodes.entrySet()) {
SNode root = rootEntry.getValue();
String orderName = rootEntry.getKey();
convertSpanToToken((SSpan) root, orderName);
}
// traverse through all SOrderRelations in order
graph.traverse(new LinkedList<SNode>(rootNodes.values()), GRAPH_TRAVERSE_TYPE.TOP_DOWN_DEPTH_FIRST, "TimeReconstructSOrderRelations", new GraphTraverseHandler() {
@Override
public void nodeReached(GRAPH_TRAVERSE_TYPE traversalType, String traversalId, SNode currNode, SRelation relation, SNode fromNode, long order) {
if (relation instanceof SOrderRelation && currNode instanceof SSpan) {
String orderName = ((SOrderRelation) relation).getType();
if (fromNode != null) {
// add a space to the text
StringBuilder t = textDataByName.get(orderName);
if (t != null) {
t.append(" ");
}
}
convertSpanToToken((SSpan) currNode, orderName);
}
}
@Override
public void nodeLeft(GRAPH_TRAVERSE_TYPE traversalType, String traversalId, SNode currNode, SRelation relation, SNode fromNode, long order) {
}
@Override
public boolean checkConstraint(GRAPH_TRAVERSE_TYPE traversalType, String traversalId, SRelation relation, SNode currNode, long order) {
if (relation == null || relation instanceof SOrderRelation) {
return true;
} else {
return false;
}
}
});
// update the text of the TextualDSs
for (Map.Entry<String, StringBuilder> textDataEntry : textDataByName.entrySet()) {
STextualDS textDS = textsByName.get(textDataEntry.getKey());
if (textDS != null) {
textDS.setText(textDataEntry.getValue().toString());
}
}
}
Aggregations