summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-10-09 19:39:50 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-10-09 19:39:50 +0000
commitc9b2e117828dd863268f649fcb163fbbf61d667f (patch)
tree150d7e58705d49714253cef2e366898cee5e6364 /src
parentf58d684ab472811f676bb0474498acb872f36278 (diff)
added lookupMorpho in the Java binding
Diffstat (limited to 'src')
-rw-r--r--src/runtime/java/jpgf.c47
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Concr.java2
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/MorphoAnalysis.java25
3 files changed, 74 insertions, 0 deletions
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, "<init>", "()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, "<init>", "(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<MorphoAnalysis> 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;
+ }
+}