forked from GitHub/gf-core
added getFunctionProb in the Java and C API
This commit is contained in:
@@ -165,6 +165,17 @@ pgf_function_type(PgfPGF* pgf, PgfCId funname)
|
||||
return absfun->type;
|
||||
}
|
||||
|
||||
double
|
||||
pgf_function_prob(PgfPGF* pgf, PgfCId funname)
|
||||
{
|
||||
PgfAbsFun* absfun =
|
||||
gu_seq_binsearch(pgf->abstract.funs, pgf_absfun_order, PgfAbsFun, funname);
|
||||
if (absfun == NULL)
|
||||
return INFINITY;
|
||||
|
||||
return absfun->ep.prob;
|
||||
}
|
||||
|
||||
GuString
|
||||
pgf_print_name(PgfConcr* concr, PgfCId id)
|
||||
{
|
||||
|
||||
@@ -66,6 +66,9 @@ pgf_iter_functions_by_cat(PgfPGF* pgf, PgfCId catname,
|
||||
PgfType*
|
||||
pgf_function_type(PgfPGF* pgf, PgfCId funname);
|
||||
|
||||
double
|
||||
pgf_function_prob(PgfPGF* pgf, PgfCId funname);
|
||||
|
||||
GuString
|
||||
pgf_print_name(PgfConcr*, PgfCId id);
|
||||
|
||||
|
||||
@@ -178,6 +178,18 @@ Java_org_grammaticalframework_pgf_PGF_getFunctionType(JNIEnv* env, jobject self,
|
||||
return jtype;
|
||||
}
|
||||
|
||||
JNIEXPORT jdouble JNICALL
|
||||
Java_org_grammaticalframework_pgf_PGF_getFunctionProb(JNIEnv* env, jobject self, jstring jid)
|
||||
{
|
||||
PgfPGF* pgf = get_ref(env, self);
|
||||
GuPool* tmp_pool = gu_local_pool();
|
||||
PgfCId id = j2gu_string(env, jid, tmp_pool);
|
||||
double prob = pgf_function_prob(pgf, id);
|
||||
gu_pool_free(tmp_pool);
|
||||
|
||||
return prob;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
GuMapItor fn;
|
||||
JNIEnv *env;
|
||||
|
||||
@@ -42,6 +42,12 @@ public class PGF {
|
||||
*/
|
||||
public native Type getFunctionType(String fun);
|
||||
|
||||
/** Returns the negative logarithmic probability of the function
|
||||
* with the given name.
|
||||
* @param fun The name of the function.
|
||||
*/
|
||||
public native double getFunctionProb(String fun);
|
||||
|
||||
/** Returns an iterable over the set of all expression in
|
||||
* the given category. The expressions are enumerated in decreasing
|
||||
* probability order.
|
||||
|
||||
Reference in New Issue
Block a user