1
0
forked from GitHub/gf-core

added lookupMorpho in the Java binding

This commit is contained in:
kr.angelov
2013-10-09 19:39:50 +00:00
parent 835a15a343
commit 76014aa2cc
3 changed files with 74 additions and 0 deletions

View File

@@ -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)
{

View File

@@ -21,6 +21,8 @@ public class Concr {
public native String linearize(Expr expr);
public native List<MorphoAnalysis> lookupMorpho(String sentence);
//////////////////////////////////////////////////////////////////
// private stuff

View File

@@ -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;
}
}