From fe49ddf16d132eb0b9af299d4ab6c8da5c1cacb9 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Tue, 17 Jun 2014 06:57:12 +0000 Subject: [PATCH] now the named entities recognizer returns dictionary entries if the name is known --- examples/app/Makefile | 2 +- src/runtime/java/Test.java | 1 + .../pgf/NercLiteralCallback.java | 30 +++++++++++++++++-- .../ui/android/Translator.java | 2 +- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/examples/app/Makefile b/examples/app/Makefile index 31ac95450..a51911396 100644 --- a/examples/app/Makefile +++ b/examples/app/Makefile @@ -9,7 +9,7 @@ Phrasebook: cd ../phrasebook ; make forApp ; cd ../app S=-s -GFMKT=mkdir -p $(GFODIR) && gf $S -make -literal=Symb -probs=$(PROBSFILE) -gfo-dir $(GFODIR) +GFMKT=mkdir -p $(GFODIR) && gf $S -make -literal=PN -probs=$(PROBSFILE) -gfo-dir $(GFODIR) APP=AppEng.pgf AppBul.pgf AppChi.pgf AppGer.pgf AppSwe.pgf AppHin.pgf AppFin.pgf AppFre.pgf AppIta.pgf AppSpa.pgf AppDut.pgf diff --git a/src/runtime/java/Test.java b/src/runtime/java/Test.java index 77de413b3..7ac11d8a3 100644 --- a/src/runtime/java/Test.java +++ b/src/runtime/java/Test.java @@ -18,6 +18,7 @@ public class Test { System.out.println(gr.getAbstractName()); for (Map.Entry entry : gr.getLanguages().entrySet()) { System.out.println(entry.getKey()+" "+entry.getValue()+" "+entry.getValue().getName()); + entry.getValue().addLiteral("PN", new NercLiteralCallback(gr,entry.getValue())); } int count = 10; 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); } diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java index 4cda887af..4643eaf4e 100644 --- a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java +++ b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java @@ -495,7 +495,7 @@ public class Translator { long t1 = System.currentTimeMillis(); mConcr = mGrammarLoader.getGrammar().getLanguages().get(mLanguage.getConcrete()); mConcr.load(in); - mConcr.addLiteral("Symb", new NercLiteralCallback()); + mConcr.addLiteral("PN", new NercLiteralCallback(mGrammarLoader.getGrammar(), mConcr)); long t2 = System.currentTimeMillis(); Log.d(TAG, name + " loaded ("+(t2-t1)+" ms)"); } catch (FileNotFoundException e) {