JNIEXPORT jint JNICALL Java_edu_hit_ir_ltp4j_Parser_parse (JNIEnv * env, jclass obj, jobject array_words, jobject array_tags, jobject array_heads, jobject array_deprels){ jclass array_list = env->GetObjectClass(array_words); jclass integer = env->FindClass("java/lang/Integer"); jmethodID list_add = env->GetMethodID(array_list,"add","(Ljava/lang/Object;)Z"); jmethodID list_get = env->GetMethodID(array_list,"get","(I)Ljava/lang/Object;"); jmethodID list_size = env->GetMethodID(array_list,"size","()I"); jmethodID integer_init =env->GetMethodID(integer,"<init>","(I)V"); std::vector<std::string> words,tags,deprels; std::vector<int> heads; int size_words = env->CallIntMethod(array_words,list_size); int size_tags = env->CallIntMethod(array_tags,list_size); if(size_words!=size_tags) { return -1; } for(int i = 0;i<size_words;i++){ jobject tmp = env->CallObjectMethod(array_words,list_get,i); jstring s = reinterpret_cast<jstring> (tmp); const char * st = env->GetStringUTFChars(s,0); std::string s_s(st); words.push_back(s_s); env->ReleaseStringUTFChars( s, st); } for(int i = 0;i<size_tags;i++){ jobject tmp = env->CallObjectMethod(array_tags,list_get,i); jstring s = reinterpret_cast<jstring> (tmp); const char * st = env->GetStringUTFChars(s,0); std::string s_s(st); tags.push_back(s_s); env->ReleaseStringUTFChars( s, st); } int len = parser_parse(parser,words,tags,heads,deprels); if(len<0) { return -1; } int size = heads.size(); for(int i = 0;i<size;i++){ jobject integer_object = env->NewObject(integer,integer_init,heads.at(i)); env->CallBooleanMethod(array_heads,list_add, integer_object); } for(int i = 0;i<size;i++){ jobject tmp = stringToJstring(env,deprels[i].c_str()); env->CallBooleanMethod(array_deprels,list_add,tmp); } return len; }
JNIEXPORT jint JNICALL Java_edu_hit_ir_ltp4j_SRL_srl (JNIEnv * env, jclass obj, jobject array_words, jobject array_tags, jobject array_ners, jobject array_heads, jobject array_deprels, jobject srl_result){ jclass array_list = env->GetObjectClass(array_words); jmethodID list_construct = env->GetMethodID(array_list,"<init>","()V"); jmethodID list_add = env->GetMethodID(array_list,"add","(Ljava/lang/Object;)Z"); jmethodID list_get = env->GetMethodID(array_list,"get","(I)Ljava/lang/Object;"); jmethodID list_size = env->GetMethodID(array_list,"size","()I"); jclass integer = env->FindClass("java/lang/Integer"); jmethodID integer_construct =env->GetMethodID(integer,"<init>","(I)V"); jmethodID integer_int =env->GetMethodID(integer,"intValue","()I"); jclass pair = env->FindClass("edu/hit/ir/ltp4j/Pair"); jmethodID pair_construct = env->GetMethodID(pair,"<init>","(Ljava/lang/Object;Ljava/lang/Object;)V"); std::vector<std::string> words,tags,ners,deprels; std::vector<int> heads; std::vector<std::pair<int,std::string> > parsers; std::vector< std::pair< int, std::vector< std::pair<std::string, std::pair< int, int > > > > > srls; int size_words = env->CallIntMethod(array_words,list_size); for(int i = 0;i<size_words;i++){ jobject tmp = env->CallObjectMethod(array_words,list_get,i); jstring s = reinterpret_cast<jstring> (tmp); const char * st = env->GetStringUTFChars(s,0); std::string s_s(st); words.push_back(s_s); env->ReleaseStringUTFChars( s, st); } int size_tags = env->CallIntMethod(array_tags,list_size); for(int i = 0;i<size_tags;i++){ jobject tmp = env->CallObjectMethod(array_tags,list_get,i); jstring s = reinterpret_cast<jstring> (tmp); const char * st = env->GetStringUTFChars(s,0); std::string s_s(st); tags.push_back(s_s); env->ReleaseStringUTFChars( s, st); } int size_ners = env->CallIntMethod(array_ners,list_size); for(int i = 0;i<size_ners;i++){ jobject tmp = env->CallObjectMethod(array_ners,list_get,i); jstring s = reinterpret_cast<jstring> (tmp); const char * st = env->GetStringUTFChars(s,0); std::string s_s(st); ners.push_back(s_s); env->ReleaseStringUTFChars( s, st); } int size_heads = env->CallIntMethod(array_heads,list_size); for(int i = 0;i<size_heads;i++){ jobject tmp = env->CallObjectMethod(array_heads,list_get,i); int digit = env->CallIntMethod(tmp,integer_int); heads.push_back(digit); } int size_deprels = env->CallIntMethod(array_deprels,list_size); for(int i = 0;i<size_deprels;i++){ jobject tmp = env->CallObjectMethod(array_deprels,list_get,i); jstring s = reinterpret_cast<jstring> (tmp); const char * st = env->GetStringUTFChars(s,0); std::string s_s(st); deprels.push_back(s_s); env->ReleaseStringUTFChars( s, st); } for(int i = 0;i<size_heads;i++){ parsers.push_back(make_pair(heads.at(i),deprels.at(i))); } int len = DoSRL(words,tags,ners,parsers,srls); if(len<0) return -1; for(int i = 0;i<srls.size();++i) { jobject trigger = env->NewObject(integer,integer_construct,srls[i].first); jobject args = env->NewObject(array_list,list_construct); for(int j = 0;j<srls[i].second.size();++j) { jobject start = env->NewObject(integer,integer_construct,srls[i].second[j].second.first); jobject end = env->NewObject(integer,integer_construct,srls[i].second[j].second.second); jobject bound = env->NewObject(pair,pair_construct,start,end); jobject rels = stringToJstring(env,srls[i].second[j].first.c_str()); jobject inner = env->NewObject(pair,pair_construct,rels,bound); env->CallBooleanMethod(args,list_add,inner); } jobject outer = env->NewObject(pair,pair_construct,trigger,args); env->CallBooleanMethod(srl_result,list_add,outer); } return srls.size(); }
EvolDC1Buras::EvolDC1Buras(unsigned int dim_i, schemes scheme, orders order, const StandardModel& model) : RGEvolutor(dim_i, scheme, order), model(model), v(dim_i,0.), vi(dim_i,0.), js(dim_i,0.), h(dim_i,0.), gg(dim_i,0.), s_s(dim_i,0.), jssv(dim_i,0.), jss(dim_i,0.), jv(dim_i,0.), vij(dim_i,0.), e(dim_i,0.), dim(dim_i) { /*magic numbers a & b */ for(int L=2; L>-1; L--){ /* L=2 --> u,d,s,c (nf=4) L=1 --> u,d,s,c,b (nf=5) L=0 --> u,d,s,c,b,t (nf=6)*/ nu = L; nd = L; if(L == 1){nd = 3; nu = 2;} if(L == 0){nd = 3; nu = 3;} AnomalousDimension_DC1_Buras(LO,nu,nd).transpose().eigensystem(v,e); vi = v.inverse(); for(unsigned int i = 0; i < dim; i++){ a[L][i] = e(i).real(); for (unsigned int j = 0; j < dim; j++) { for (unsigned int k = 0; k < dim; k++) { b[L][i][j][k] = v(i, k).real() * vi(k, j).real(); } } } // LO evolutor in the standard basis gg = vi * AnomalousDimension_DC1_Buras(NLO,nu,nd).transpose() * v; double b0 = model.Beta0(6-L); double b1 = model.Beta1(6-L); for (unsigned int i = 0; i < dim; i++){ for (unsigned int j = 0; j < dim; j++){ s_s.assign( i, j, (b1 / b0) * (i==j) * e(i).real() - gg(i,j)); if(fabs(e(i).real() - e(j).real() + 2. * b0)>0.00000000001){ h.assign( i, j, s_s(i,j) / (2. * b0 + e(i) - e(j))); } } } js = v * h * vi; jv = js * v; vij = vi * js; jss = v * s_s * vi; jssv = jss * v; for (unsigned int i = 0; i < dim; i++){ for (unsigned int j = 0; j < dim; j++){ if(fabs(e(i).real() - e(j).real() + 2. * b0) > 0.00000000001){ for(unsigned int k = 0; k < dim; k++){ c[L][i][j][k] = jv(i, k).real() * vi(k, j).real(); d[L][i][j][k] = -v(i, k).real() * vij(k, j).real(); } } else{ for(unsigned int k = 0; k < dim; k++){ c[L][i][j][k] = (1./(2. * b0)) * jssv(i, k).real() * vi(k, j).real(); d[L][i][j][k] = 0.; } } } } } }