Пример #1
0
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;
}
Пример #2
0
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);
  }
}
Пример #3
0
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);
}
Пример #4
0
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;
}
Пример #5
0
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);
}