From c9b2e117828dd863268f649fcb163fbbf61d667f Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Wed, 9 Oct 2013 19:39:50 +0000 Subject: [PATCH] added lookupMorpho in the Java binding --- src/runtime/java/jpgf.c | 47 +++++++++++++++++++ .../org/grammaticalframework/pgf/Concr.java | 2 + .../pgf/MorphoAnalysis.java | 25 ++++++++++ 3 files changed, 74 insertions(+) create mode 100644 src/runtime/java/org/grammaticalframework/pgf/MorphoAnalysis.java diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c index 871b80f16..ec29adfd8 100644 --- a/src/runtime/java/jpgf.c +++ b/src/runtime/java/jpgf.c @@ -350,6 +350,53 @@ Java_org_grammaticalframework_pgf_Concr_linearize(JNIEnv* env, jobject self, job return jstr; } +typedef struct { + PgfMorphoCallback fn; + jobject analyses; + JNIEnv* env; + jmethodID addId; + jclass an_class; + jmethodID an_constrId; +} JMorphoCallback; + +static void +jpgf_collect_morpho(PgfMorphoCallback* self, + PgfCId lemma, GuString analysis, prob_t prob, + GuExn* err) +{ + JMorphoCallback* callback = (JMorphoCallback*) self; + JNIEnv* env = callback->env; + + jobject jan = (*env)->NewObject(env, + callback->an_class, + callback->an_constrId, + gu2j_string(env,lemma), + gu2j_string(env,analysis), + (double) prob); + (*env)->CallObjectMethod(env, callback->analyses, callback->addId, jan); + (*env)->DeleteLocalRef(env, jan); +} + +JNIEXPORT jobject JNICALL +Java_org_grammaticalframework_pgf_Concr_lookupMorpho(JNIEnv* env, jobject self, jstring sentence) +{ + jclass list_class = (*env)->FindClass(env, "java/util/ArrayList"); + jmethodID list_constrId = (*env)->GetMethodID(env, list_class, "", "()V"); + jobject analyses = (*env)->NewObject(env, list_class, list_constrId); + + jmethodID addId = (*env)->GetMethodID(env, list_class, "add", "(Ljava/lang/Object;)Z"); + + jclass an_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/MorphoAnalysis"); + jmethodID an_constrId = (*env)->GetMethodID(env, an_class, "", "(Ljava/lang/String;Ljava/lang/String;D)V"); + + GuPool* tmp_pool = gu_new_pool(); + JMorphoCallback callback = { { jpgf_collect_morpho }, analyses, env, addId, an_class, an_constrId }; + pgf_lookup_morpho(get_ref(env, self), j2gu_string(env, sentence, tmp_pool), + &callback.fn, NULL); + + return analyses; +} + JNIEXPORT void JNICALL Java_org_grammaticalframework_pgf_Pool_free(JNIEnv* env, jobject self, jlong ref) { diff --git a/src/runtime/java/org/grammaticalframework/pgf/Concr.java b/src/runtime/java/org/grammaticalframework/pgf/Concr.java index d4c95f58e..a824b740f 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/Concr.java +++ b/src/runtime/java/org/grammaticalframework/pgf/Concr.java @@ -21,6 +21,8 @@ public class Concr { public native String linearize(Expr expr); + public native List lookupMorpho(String sentence); + ////////////////////////////////////////////////////////////////// // private stuff diff --git a/src/runtime/java/org/grammaticalframework/pgf/MorphoAnalysis.java b/src/runtime/java/org/grammaticalframework/pgf/MorphoAnalysis.java new file mode 100644 index 000000000..d69395a1f --- /dev/null +++ b/src/runtime/java/org/grammaticalframework/pgf/MorphoAnalysis.java @@ -0,0 +1,25 @@ +package org.grammaticalframework.pgf; + +public class MorphoAnalysis { + private String lemma; + private String field; + private double prob; + + public MorphoAnalysis(String lemma, String field, double prob) { + this.lemma = lemma; + this.field = field; + this.prob = prob; + } + + public String getLemma() { + return lemma; + } + + public String getField() { + return field; + } + + public double getProb() { + return prob; + } +}