diff options
Diffstat (limited to 'src/runtime/java/org/grammaticalframework')
| -rw-r--r-- | src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java b/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java index 627cbdd4f..8d206667d 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java +++ b/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java @@ -4,6 +4,14 @@ import java.util.Collections; import java.util.Iterator; public class NercLiteralCallback implements LiteralCallback { + private PGF pgf; + private Concr concr; + + public NercLiteralCallback(PGF pgf, Concr concr) { + this.pgf = pgf; + this.concr = concr; + } + public CallbackResult match(int lin_idx, String sentence, int offset) { StringBuilder sbuilder = new StringBuilder(); @@ -29,8 +37,26 @@ public class NercLiteralCallback implements LiteralCallback { } if (i > 0) { - Expr expr = new Expr(sbuilder.toString()); - expr = new Expr("MkSymb", expr); + String name = sbuilder.toString(); + String lemma = null; + double prob = 0; + for (MorphoAnalysis an : concr.lookupMorpho(name)) { + if ("PN".equals(pgf.getFunctionType(an.getLemma()).getCategory()) && + prob < an.getProb()) { + lemma = an.getLemma(); + prob = an.getProb(); + } + } + + Expr expr; + if (lemma == null) { + expr = new Expr(name); + expr = new Expr("MkSymb", expr); + expr = new Expr("SymbPN", expr); + } else { + expr = new Expr(lemma, new Expr[0]); + } + return new CallbackResult(new ExprProb(expr, 0), end_offset); } |
