PyMODINIT_FUNC PyInit_simplepinyin(void) { context = pinyin_init(LIBPINYIN_DATA, "/tmp"); // printf("DEBUG: pinyin_init\n"); if (context == NULL) return NULL; pinyin_option_t options = PINYIN_CORRECT_ALL | USE_DIVIDED_TABLE | USE_RESPLIT_TABLE | 0; if (!pinyin_set_options(context, options)) return NULL; if (Py_AtExit(libpinyin_cleanup) == -1) return NULL; PyObject* m; if (PyType_Ready(&SimplePinyinType) < 0) return NULL; m = PyModule_Create(&simplepinyinmodule); if (m == NULL) return NULL; Py_INCREF(&SimplePinyinType); PyModule_AddObject(m, "SimplePinyin", (PyObject *)&SimplePinyinType); return m; }
PinyinAdapter::PinyinAdapter(QObject *parent) : QObject(parent), m_processingWords(false) { m_context = pinyin_init(PINYIN_DATA_DIR, "."); m_instance = pinyin_alloc_instance(m_context); pinyin_set_options(m_context, IS_PINYIN | PINYIN_INCOMPLETE | USE_DIVIDED_TABLE | USE_RESPLIT_TABLE); }
void ConfigLibpinyin(FcitxLibpinyinAddonInstance* libpinyinaddon) { FcitxLibpinyinConfig *config = &libpinyinaddon->config; if (libpinyinaddon->zhuyin_context) pinyin_set_chewing_scheme(libpinyinaddon->zhuyin_context, FcitxLibpinyinTransZhuyinLayout(config->zhuyinLayout)); if (libpinyinaddon->pinyin_context) pinyin_set_double_pinyin_scheme(libpinyinaddon->pinyin_context, FcitxLibpinyinTransShuangpinScheme(config->spScheme)); pinyin::pinyin_option_t settings = 0; settings |= DYNAMIC_ADJUST; settings |= USE_DIVIDED_TABLE | USE_RESPLIT_TABLE; for (int i = 0; i <= FCITX_CR_LAST; i ++) { if (config->cr[i]) settings |= FcitxLibpinyinTransCorrection((FCITX_CORRECTION) i); } for (int i = 0; i <= FCITX_AMB_LAST; i ++) { if (config->amb[i]) settings |= FcitxLibpinyinTransAmbiguity((FCITX_AMBIGUITY) i); } if (config->incomplete) { settings |= PINYIN_INCOMPLETE; } if (config->chewingIncomplete) { settings |= CHEWING_INCOMPLETE; } if (config->useTone) { settings |= USE_TONE; } settings |= IS_PINYIN; settings |= IS_CHEWING; if (libpinyinaddon->pinyin_context) pinyin_set_options(libpinyinaddon->pinyin_context, settings); if (libpinyinaddon->zhuyin_context) pinyin_set_options(libpinyinaddon->zhuyin_context, settings); }
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; }