前の日 / 次の日 / 最新 / 2008-01

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2008-01-30 Wed

Senna で、スペルチェック [Senna]

エラーチェックをまったくして無いから気をつけて

#include <cstdio>
#include <cstring>
#include "senna.h"

int main()
{
    sen_init();

    //辞書作成
    sen_index* index = sen_index_create("c:\\index",0,SEN_INDEX_NGRAM | SEN_INDEX_SPLIT_ALPHA,512,sen_enc_default);

    sen_index_upd(index, "apple",NULL,0,"apple", 5);
    sen_index_upd(index, "book",NULL,0,"book", 4);
    sen_index_upd(index, "aplication",NULL,0,"aplication", 10);
    sen_index_upd(index, "aplicot",NULL,0,"aplicot", 7);

    //検索
    char miss_spell[] = "boplecot";//aplicot って入力したかった。
    char key[SEN_SYM_MAX_KEY_SIZE];
    int score;
    sen_records* records = sen_records_open(sen_rec_document,sen_rec_none,0);
    sen_select_optarg op;
    memset(&op,0,sizeof(op));
    op.mode = sen_sel_similar;
    op.similarity_threshold = 10; //よくわからない。いくら指定する?
    sen_index_select(index,miss_spell,sizeof(miss_spell),records,sen_sel_or,&op);

    //結果表示
    sen_records_sort(records,10,NULL);
    while(sen_records_next(records,key,SEN_SYM_MAX_KEY_SIZE,&score))
    {
        printf("key = %s score = %d\n",key,score);
    }

    sen_records_close(records);
    sen_index_close(index);
    sen_fin();

    getchar();
    return 0;
}

実行結果

key = aplicot score = 38
key = apple score = 21
key = book score = 17
key = application score = 4