public static Result[] ToResult(KiwiResHandle kiwiresult) { int resCount = kiwi_res_size(kiwiresult); if (resCount < 0) { throw new KiwiException(Marshal.PtrToStringAnsi(kiwi_error())); } Result[] ret = new Result[resCount]; for (int i = 0; i < resCount; ++i) { int num = kiwi_res_word_num(kiwiresult, i); ret[i].morphs = new Token[num]; for (int j = 0; j < num; ++j) { ret[i].morphs[j].form = Marshal.PtrToStringUni(kiwi_res_form_w(kiwiresult, i, j)); ret[i].morphs[j].tag = Marshal.PtrToStringUni(kiwi_res_tag_w(kiwiresult, i, j)); ret[i].morphs[j].position = kiwi_res_position(kiwiresult, i, j); ret[i].morphs[j].length = kiwi_res_length(kiwiresult, i, j); ret[i].morphs[j].wordPosition = kiwi_res_word_position(kiwiresult, i, j); ret[i].morphs[j].sentPosition = kiwi_res_sent_position(kiwiresult, i, j); } ret[i].prob = kiwi_res_prob(kiwiresult, i); } return(ret); }
public Result[] Analyze(string text, int topN = 1, Match matchOptions = Match.All) { KiwiResHandle res = KiwiCAPI.kiwi_analyze_w(inst, new Utf16String(text).IntPtr, topN, (int)matchOptions); if (inst == IntPtr.Zero) { throw new KiwiException(Marshal.PtrToStringAnsi(KiwiCAPI.kiwi_error())); } Result[] ret = KiwiCAPI.ToResult(res); KiwiCAPI.kiwi_res_close(res); return(ret); }
public static extern int kiwi_res_close(KiwiResHandle result);
public static extern int kiwi_res_sent_position(KiwiResHandle result, int index, int num);
public static extern int kiwi_res_length(KiwiResHandle result, int index, int num);
public static extern IntPtr kiwi_res_tag(KiwiResHandle result, int index, int num);
public static extern int kiwi_res_word_num(KiwiResHandle result, int index);
public static extern float kiwi_res_prob(KiwiResHandle result, int index);