2008-02-22 Fri
■ D言語用の senne に log API を追加した。 [D言語][Senna]
http://mikanya.dip.jp/repos/senna/
前回からの変更点
- log API を呼べるようにした。
呼べるようにしただけで動かない。
SEN_LOG マクロをどうやって実装しようか?
mixin(SEN_LOG!(...));
mixin(sen_log!(...));
この形で使えるようにしてみた。
うまく動かない。
2008-02-06 Wed
■ D言語用に senne.h を変換した。 [D言語][Senna]
http://mikanya.dip.jp/repos/senna/
ロギング用のマクロ以外は使えるはず。
使い方
DMD 用のインポートライブラリを用意して、
senna.d をインポートして、
コンパイル。
ところで、
LGPL のヘッダを D言語用に変換して公開するにどうするといいんだろ?
とりあえず
元々のコピーライトを残して、
COPYING ファイルをつけた。
はこれでいいのかな?
2008-02-04 Mon
■ できた? [D言語][Senna]
[2008-02-01-1]
とりあえず senna.h で未定義の構造体を void にした。
sen_create_index は動いた。
[2008-02-02-1]
前方宣言が原因か。
D言語にどうあわせる?
これを
typedef struct _sen_db sendb;
こうか?
struct _sen_db; alias _sen_db sen_db;
2008-02-02 Sat
■ だめだた [D言語][Senna]
[2008-02-01-1]
senna.h の関数に構造体のポインタを渡すものがある。
渡す構造体が senna.h に定義されていない。
htod で変換しただけでは動かない。
typedef struct _sen_db sen_db;
ここでエラーが出る。
2008-02-01 Fri
■ D言語での Senna は [D言語][Senna]
D言語っぽい使い方だとどんな感じろう。
D スタイルにする。
sen_records 型は foreach 文が使えるとよさそう。
import std.stdio; import senna; int main() { sen_init(); //辞書作成 Index index = new Index(...); index.upd(...); //検索 Records records = new Records(...); index.select(...); //結果表示 records.sort(...); foreach(...) { writefln(...); } sen_fin(); readln(); return 0; }
こんな感じで使えるようにしてみよう。
2008-02-01 Fri
■ D言語で Sennaを使う方法 [D言語][Senna]
ヘッダファイルの変換
C の .h から D のモジュールへの変換
C言語ヘッダ変換
インポートライブラリの作成
IMPLIB
implib/system libsenna.lib libsenna.dll
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
2008-01-18 Fri
■ ビルドできたかな? [Senna]
テストプログラムを書く。
int main() { printf("start\n"); sen_init(); sen_index* index = sen_index_create("c:\\index",0, SEN_INDEX_NGRAM,4,sen_enc_default); if(index) { printf("sen_index_create Successful\n"); sen_rc rc; rc = sen_index_close(index); if(rc == sen_success){ printf("sen_index_close Successful\n"); }else{ printf("sen_index_close Failed\n"); } }else{ printf("sen_index_create Failed\n"); } sen_fin(); printf("end\n"); getchar(); return 0; }
c:\ に転置辞書を作成して終了する。
大丈夫みたいだ。
2008-01-18 Fri
■ senna のインストール [Senna]
windows 環境でインストールしてみる。
2) コンパイルに必要なもの
- バージョン0.81以上のmecabのmecab.hとlibmecab.libが必要。
http://mecab.sourceforge.net/ から windows 用をインストール
4) sennaのビルド手順
- sennaのsenna\vcc\mecabフォルダにmecab.hとlibmecab.libをコピー。
- senna\vccフォルダのlibsenna.vcprojをVisualStdioで開く。
- 「ビルド」メニューから"libsennaのビルド"を実行。
- ビルドに成功するとDebugビルドではsenna\vcc\Debugフォルダに、Releaseビルドではsenna\vcc\Releaseフォルダに、ibsenna.libとlibsenna.dllが作成される。
- libsenna.dllをwindowsディレクトリ(c:\WINIDOWS)のsystem32以下に移動する。
mecab.h libmecab.lib は、C:\Program Files\MeCab\sdk にある。
でVSでビルド。
エラー 2 error C3163: '_vsnprintf': 属性が前の宣言と整合しません C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h 358 libsenna.vc8
VC9 だとそのままではビルドできない?
error C3163: '_vsnprintf' で検索。
なんか同じエラーが出てる人がいる。
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2031152&SiteID=1
The VC9 CRT seems to define vsnprintf on its own, a simple shortcut that resolves to _vsnprintf. This conflicts with some third party libs (such like AngelScript) which define vsnprintf for their purposes. For AngelScript the solution is simpel: comment out the line
マクロが衝突しているのが原因
senna_in.h 76行目
#define vsnprintf _vsnprintf
をコメントアウトする。
ビルド成功した
2008-01-18 Fri
■ senna を使ってみる [Senna]
はてブから senna の存在を知る。
Google Suggestのようなものを高速に実現するサーバsuggested
[2007-09-04-1]の目的に使ってみる。