diff --git a/dkpro-core-io-webanno-asl/src/main/java/org/dkpro/core/io/webanno/tsv/internal/tsv3x/Tsv3XCasDocumentBuilder.java b/dkpro-core-io-webanno-asl/src/main/java/org/dkpro/core/io/webanno/tsv/internal/tsv3x/Tsv3XCasDocumentBuilder.java index ccb8295974..afb53bf999 100644 --- a/dkpro-core-io-webanno-asl/src/main/java/org/dkpro/core/io/webanno/tsv/internal/tsv3x/Tsv3XCasDocumentBuilder.java +++ b/dkpro-core-io-webanno-asl/src/main/java/org/dkpro/core/io/webanno/tsv/internal/tsv3x/Tsv3XCasDocumentBuilder.java @@ -37,6 +37,7 @@ import java.util.HashSet; import java.util.List; import java.util.ListIterator; +import java.util.Map.Entry; import java.util.NavigableMap; import java.util.Set; import java.util.TreeMap; @@ -133,8 +134,24 @@ public static TsvDocument of(TsvSchema aSchema, JCas aJCas) end = targetFS.getEnd(); } - TsvToken beginToken = tokenBeginIndex.floorEntry(begin).getValue(); - TsvToken endToken = tokenEndIndex.ceilingEntry(end).getValue(); + Entry beginTokenEntry = tokenBeginIndex.floorEntry(begin); + if (beginTokenEntry == null) { + throw new IllegalStateException( + "Unable to find begin token starting at or before " + begin + + " (first token starts at " + + tokenBeginIndex.pollFirstEntry().getKey() + + ") for annotation: " + annotation); + } + + Entry endTokenEntry = tokenEndIndex.ceilingEntry(end); + if (endTokenEntry == null) { + throw new IllegalStateException("Unable to find end token ending at or after " + + end + " (last token ends at " + tokenEndIndex.pollLastEntry().getKey() + + ") for annotation: " + annotation); + } + + TsvToken beginToken = beginTokenEntry.getValue(); + TsvToken endToken = endTokenEntry.getValue(); // For zero-width annotations, the begin token must match the end token. // Zero-width annotations between two directly adjacent tokens are always