in opennlp-tools/src/main/java/opennlp/tools/parser/AbstractContextGenerator.java [172:305]
protected void cons3(List<String> features, Cons c0, Cons c1, Cons c2, Collection<Parse> punct1s,
Collection<Parse> punct2s, boolean trigram, boolean bigram1, boolean bigram2) {
// features.add("stage=cons(0),cons(1),cons(2)");
if (punct1s != null) {
if (c0.index == -2) {
for (Parse p : punct1s) {
// String punct = punct(p,c1.index);
String punctbo = punctbo(p, c1.index <= 0 ? c1.index - 1 : c1.index);
//punct(-2)
//TODO consider changing
//features.add(punct);
//punctbo(-2)
features.add(punctbo);
}
}
}
if (punct2s != null) {
if (c2.index == 2) {
for (Parse p : punct2s) {
// String punct = punct(p,c2.index);
String punctbo = punctbo(p, c2.index);
//punct(2)
//TODO consider changing
//features.add(punct);
//punctbo(2)
features.add(punctbo);
}
}
if (punct1s != null) {
//cons(0),punctbo(1),cons(1),punctbo(2),cons(2)
for (Parse punct2 : punct2s) {
String punctbo2 = punctbo(punct2, c2.index <= 0 ? c2.index - 1 : c2.index);
for (Parse punct1 : punct1s) {
String punctbo1 = punctbo(punct1, c1.index <= 0 ? c1.index - 1 : c1.index);
if (trigram)
features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.cons);
if (bigram2)
features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.cons);
if (c0.unigram && c2.unigram)
features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.cons);
if (bigram1)
features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.consbo);
if (c2.unigram)
features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.cons);
if (c1.unigram)
features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.consbo);
if (c0.unigram)
features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo);
features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo);
if (zeroBackOff) {
if (bigram1) features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + punctbo2);
if (c1.unigram) features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + punctbo2);
if (c0.unigram) features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + punctbo2);
features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + punctbo2);
}
}
}
}
else { //punct1s == null
//cons(0),cons(1),punctbo(2),cons(2)
for (Parse punct2 : punct2s) {
String punctbo2 = punctbo(punct2, c2.index <= 0 ? c2.index - 1 : c2.index);
if (trigram) features.add(c0.cons + "," + c1.cons + "," + punctbo2 + "," + c2.cons);
if (bigram2)
features.add(c0.consbo + "," + c1.cons + "," + punctbo2 + "," + c2.cons);
if (c0.unigram && c2.unigram)
features.add(c0.cons + "," + c1.consbo + "," + punctbo2 + "," + c2.cons);
if (bigram1) features.add(c0.cons + "," + c1.cons + "," + punctbo2 + "," + c2.consbo);
if (c2.unigram) features.add(c0.consbo + "," + c1.consbo + "," + punctbo2 + "," + c2.cons);
if (c1.unigram) features.add(c0.consbo + "," + c1.cons + "," + punctbo2 + "," + c2.consbo);
if (c0.unigram) features.add(c0.cons + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo);
features.add(c0.consbo + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo);
if (zeroBackOff) {
if (bigram1) features.add(c0.cons + "," + c1.cons + "," + punctbo2);
if (c1.unigram) features.add(c0.consbo + "," + c1.cons + "," + punctbo2);
if (c0.unigram) features.add(c0.cons + "," + c1.consbo + "," + punctbo2);
features.add(c0.consbo + "," + c1.consbo + "," + punctbo2);
}
}
}
}
else {
if (punct1s != null) {
//cons(0),punctbo(1),cons(1),cons(2)
for (Parse punct1 : punct1s) {
String punctbo1 = punctbo(punct1, c1.index <= 0 ? c1.index - 1 : c1.index);
if (trigram)
features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + c2.cons);
if (bigram2)
features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + c2.cons);
if (c0.unigram && c2.unigram)
features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + c2.cons);
if (bigram1)
features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + c2.consbo);
if (c2.unigram)
features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + c2.cons);
if (c1.unigram)
features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + c2.consbo);
if (c0.unigram)
features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + c2.consbo);
features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + c2.consbo);
//zero backoff case covered by cons(0)cons(1)
}
}
else {
//cons(0),cons(1),cons(2)
if (trigram) features.add(c0.cons + "," + c1.cons + "," + c2.cons);
if (bigram2) features.add(c0.consbo + "," + c1.cons + "," + c2.cons);
if (c0.unigram && c2.unigram) features.add(c0.cons + "," + c1.consbo + "," + c2.cons);
if (bigram1) features.add(c0.cons + "," + c1.cons + "," + c2.consbo);
if (c2.unigram) features.add(c0.consbo + "," + c1.consbo + "," + c2.cons);
if (c1.unigram) features.add(c0.consbo + "," + c1.cons + "," + c2.consbo);
if (c0.unigram) features.add(c0.cons + "," + c1.consbo + "," + c2.consbo);
features.add(c0.consbo + "," + c1.consbo + "," + c2.consbo);
}
}
}