BOOL Mecab_load(Mecab *m, const char *dicdir){ int i; int argc = 3; char **argv; if(m == NULL) return FALSE; if(m->mecab != NULL) Mecab_clear(m); if(dicdir == NULL || strlen(dicdir) == 0) return FALSE; argv = (char **) malloc(sizeof(char *) * argc); argv[0] = strdup("mecab"); argv[1] = strdup("-d"); argv[2] = strdup(dicdir); m->mecab = mecab_new(argc, argv); for(i = 0;i < argc;i++) free(argv[i]); free(argv); if(m->mecab == NULL){ fprintf(stderr,"ERROR: Mecab_load() in mecab.cpp: Cannot open %s.\n",dicdir); return FALSE; } return TRUE; }
void Mecab_load(Mecab *m, char *dicdir){ const int argc = 3; char *argv[] = {(char *) "mecab", (char *) "-d", dicdir}; if(m->mecab != NULL) Mecab_clear(m); m->mecab = mecab_new(argc,argv); if(m->mecab == NULL){ fprintf(stderr,"ERROR: Mecab_load() in mecab.cpp: Cannot open %s.\n",dicdir); exit(1); } }
static emacs_value Fmecab_new(emacs_env *env, ptrdiff_t nargs, emacs_value args[], void *data) { emacs_value type = env->type_of(env, args[0]); mecab_t *mecab; if (!env->is_not_nil(env, args[0])) { mecab = mecab_new(0, NULL); } else if (env->eq(env, type, env->intern(env, "string"))) { ptrdiff_t size; char *dict = retrieve_string(env, args[0], &size); mecab = mecab_new2(dict); free(dict); } else if (env->eq(env, type, env->intern(env, "vector"))) { int argc = (int)env->vec_size(env, args[0]); char **argv = (char**)malloc(sizeof(char*) * argc); for (int i = 0; i < argc; ++i) { ptrdiff_t size; emacs_value dict = env->vec_get(env, args[0], i); argv[i] = retrieve_string(env, dict, &size); } mecab = mecab_new(argc, argv); for (int i = 0; i < argc; ++i) { free(argv[i]); } free(argv); } else { emacs_value errmsg = env->make_string(env, "Invalid argument", sizeof("Invalid argument")); env->non_local_exit_signal(env, env->intern(env, "error"), errmsg); return env->intern(env, "nil"); } return env->make_user_ptr(env, el_mecab_free, mecab); }
int init(iplus1_lang_t* lang) { strcpy(lang->lang, "jpn"); lang->full_lang = strdup("japanese"); lang->param = malloc(sizeof(iplus1_japanese_t)); if (lang->param == NULL) return IPLUS1_FAIL; lang->parse = parse; iplus1_japanese_t* jpn = (iplus1_japanese_t*)lang->param; jpn->mecab = mecab_new(0, NULL); return IPLUS1_SUCCESS; }
DPS_ENV *DpsEnvInit(DPS_ENV *Conf){ #ifdef MECAB const char *mecab_argv[8] = {"mecab", "-F", "%m ", "-B", " ", "-E", " ", NULL}; #endif if(!Conf){ Conf=(DPS_ENV *)DpsMalloc(sizeof(DPS_ENV)); if (Conf == NULL) return NULL; bzero((void*)Conf, sizeof(*Conf)); Conf->freeme=1; }else{ bzero((void*)Conf, sizeof(*Conf)); } Conf->Flags.OptimizeAtUpdate = 1; Conf->Flags.do_excerpt = 1; Conf->Flags.PopRankNeoIterations = 3; Conf->Flags.GuesserBytes = 512; Conf->Flags.robots_period = 604800; /* one week */ Conf->Flags.URLInfoSQL = 1; Conf->Flags.SRVInfoSQL = 1; Conf->Flags.CheckInsertSQL = 1; Conf->Flags.mark_for_index = 1; Conf->Flags.MaxSiteLevel = 2; Conf->Flags.SEASentences = 32; Conf->Flags.SEASentenceMinLength = 64; Conf->Flags.PagesInGroup = 1; Conf->Flags.SubDocCnt = 5; Conf->Flags.MaxCrawlDelay = 300; Conf->Flags.rel_nofollow = 1; Conf->Flags.bind_addr.sin_family = AF_INET; Conf->Flags.use_meta = 1; Conf->WordParam.min_word_len = 1; Conf->WordParam.max_word_len = 32; Conf->WordParam.correct_factor = 1; Conf->WordParam.incorrect_factor = 1; Conf->url_number = 0x7FFFFFFF; Conf->lcs=DpsGetCharSet("latin1"); Conf->bcs=DpsGetCharSet("latin1"); Conf->CharsToEscape = DpsStrdup("\"&<>"); #ifdef MECAB /* Conf->mecab = mecab_new2 ("mecab -F \"%m \" -B \" \" -E \" \"");*/ Conf->mecab = mecab_new(7, (char**)mecab_argv); #endif return(Conf); }