in opennlp-coref/src/main/java/opennlp/tools/lang/english/TreebankNameFinder.java [99:158]
private static void processText(TreebankNameFinder[] finders, String[] tags, BufferedReader input)
throws IOException {
Span[][] nameSpans = new Span[finders.length][];
String[][] nameOutcomes = new String[finders.length][];
opennlp.tools.tokenize.Tokenizer tokenizer = SimpleTokenizer.INSTANCE;
StringBuffer output = new StringBuffer();
for (String line = input.readLine(); null != line; line = input.readLine()) {
if (line.isEmpty()) {
clearPrevTokenMaps(finders);
System.out.println();
continue;
}
output.setLength(0);
Span[] spans = tokenizer.tokenizePos(line);
String[] tokens = Span.spansToStrings(spans,line);
for (int fi = 0, fl = finders.length; fi < fl; fi++) {
nameSpans[fi] = finders[fi].nameFinder.find(tokens);
nameOutcomes[fi] = NameFinderEventStream.generateOutcomes(nameSpans[fi], null, tokens.length);
}
for (int ti = 0, tl = tokens.length; ti < tl; ti++) {
for (int fi = 0, fl = finders.length; fi < fl; fi++) {
//check for end tags
if (ti != 0) {
if ((nameOutcomes[fi][ti].equals(NameFinderME.START)
|| nameOutcomes[fi][ti].equals(NameFinderME.OTHER))
&& (nameOutcomes[fi][ti - 1].equals(NameFinderME.START)
|| nameOutcomes[fi][ti - 1].equals(NameFinderME.CONTINUE))) {
output.append("</").append(tags[fi]).append(">");
}
}
}
if (ti > 0 && spans[ti - 1].getEnd() < spans[ti].getStart()) {
output.append(line.substring(spans[ti - 1].getEnd(), spans[ti].getStart()));
}
//check for start tags
for (int fi = 0, fl = finders.length; fi < fl; fi++) {
if (nameOutcomes[fi][ti].equals(NameFinderME.START)) {
output.append("<").append(tags[fi]).append(">");
}
}
output.append(tokens[ti]);
}
//final end tags
if (tokens.length != 0) {
for (int fi = 0, fl = finders.length; fi < fl; fi++) {
if (nameOutcomes[fi][tokens.length - 1].equals(NameFinderME.START)
|| nameOutcomes[fi][tokens.length - 1].equals(NameFinderME.CONTINUE)) {
output.append("</").append(tags[fi]).append(">");
}
}
}
if (tokens.length != 0) {
if (spans[tokens.length - 1].getEnd() < line.length()) {
output.append(line.substring(spans[tokens.length - 1].getEnd()));
}
}
System.out.println(output);
}
}