/** * @brief get the candidate word by index * * @param iIndex index of candidate word * @return the string of canidate word **/ __EXPORT_API INPUT_RETURN_VALUE FcitxLibpinyinGetCandWord (void* arg, FcitxCandidateWord* candWord) { FcitxLibpinyin* libpinyin = (FcitxLibpinyin* )arg; FcitxLibpinyinCandWord* pyCand = (FcitxLibpinyinCandWord*) candWord->priv; FcitxInstance* instance = libpinyin->owner->owner; FcitxInputState* input = FcitxInstanceGetInputState(instance); if (pyCand->ispunc) { strcpy(FcitxInputStateGetOutputString(input), candWord->strWord); return IRV_COMMIT_STRING; } else { if (!libpinyin->candidate || libpinyin->candidate->len <= pyCand->idx) return IRV_TO_PROCESS; lookup_candidate_t* cand = &g_array_index(libpinyin->candidate, lookup_candidate_t, pyCand->idx); pinyin_choose_candidate(libpinyin->inst, LibpinyinGetOffset(libpinyin), cand); FcitxLibpinyinFixed f; f.len = fcitx_utf8_strlen(cand->m_phrase_string); g_array_append_val(libpinyin->fixed_string, f); int offset = LibpinyinGetOffset(libpinyin); if (offset >= libpinyin->inst->m_pinyin_keys->len) { char* sentence = NULL; pinyin_guess_sentence(libpinyin->inst); sentence = LibpinyinGetSentence(libpinyin); if (sentence) { strcpy(FcitxInputStateGetOutputString(input), sentence); g_free(sentence); pinyin_train(libpinyin->inst); } else strcpy(FcitxInputStateGetOutputString(input), ""); return IRV_COMMIT_STRING; } int pyoffset = LibpinyinGetPinyinOffset(libpinyin); if (pyoffset > libpinyin->cursor_pos) libpinyin->cursor_pos = pyoffset; return IRV_DISPLAY_CANDWORDS; } return IRV_TO_PROCESS; }
int main(int argc, char * argv[]){ pinyin_context_t * context = pinyin_init("../data", "../data"); pinyin_instance_t * instance = pinyin_alloc_instance(context); char* linebuf = NULL; size_t size = 0; ssize_t read; while( (read = getline(&linebuf, &size, stdin)) != -1 ){ if ( '\n' == linebuf[strlen(linebuf) - 1] ) { linebuf[strlen(linebuf) - 1] = '\0'; } if ( strcmp ( linebuf, "quit" ) == 0) break; pinyin_parse_more_chewings (instance, linebuf); pinyin_guess_sentence(instance); char * sentence = NULL; pinyin_get_sentence (instance, &sentence); if (sentence) printf("%s\n", sentence); g_free(sentence); pinyin_train(instance); pinyin_reset(instance); pinyin_save(context); } pinyin_free_instance(instance); pinyin_mask_out(context, 0x0, 0x0); pinyin_save(context); pinyin_fini(context); free(linebuf); return 0; }
int main(int argc, char * argv[]){ pinyin_context_t * context = pinyin_init("../data", "../data"); pinyin_option_t options = PINYIN_CORRECT_ALL | USE_DIVIDED_TABLE | USE_RESPLIT_TABLE | DYNAMIC_ADJUST; pinyin_set_options(context, options); pinyin_instance_t * instance = pinyin_alloc_instance(context); CandidateVector candidates = g_array_new (FALSE, FALSE, sizeof(lookup_candidate_t)); char * prefixbuf = NULL; size_t prefixsize = 0; char * linebuf = NULL; size_t linesize = 0; ssize_t read; while( TRUE ){ fprintf(stdout, "prefix:"); fflush(stdout); if ((read = getline(&prefixbuf, &prefixsize, stdin)) == -1) break; if ( '\n' == prefixbuf[strlen(prefixbuf) - 1] ) { prefixbuf[strlen(prefixbuf) - 1] = '\0'; } if ((read = getline(&linebuf, &linesize, stdin)) == -1) break; if ( '\n' == linebuf[strlen(linebuf) - 1] ) { linebuf[strlen(linebuf) - 1] = '\0'; } if ( strcmp ( linebuf, "quit" ) == 0) break; pinyin_parse_more_full_pinyins(instance, linebuf); pinyin_guess_sentence_with_prefix(instance, prefixbuf); pinyin_get_full_pinyin_candidates(instance, 0, candidates); for (size_t i = 0; i < candidates->len; ++i) { lookup_candidate_t * candidate = &g_array_index (candidates, lookup_candidate_t, i); const char * pinyins = candidate->m_new_pinyins; const char * word = candidate->m_phrase_string; if (pinyins) printf("%s %s\t", pinyins, word); else printf("%s\t", word); } printf("\n"); pinyin_train(instance); pinyin_reset(instance); pinyin_save(context); } g_array_free(candidates, TRUE); pinyin_free_instance(instance); pinyin_fini(context); free(prefixbuf); free(linebuf); return 0; }