MacでHyper Estraierを使う

| Topic path: Top / テキスト・マイニング / MacでHyper Estraierを使う

*はじめに [#n2077ef0]

「[[Hyper Estraier:http://hyperestraier.sourceforge.net/]]」は,平林幹雄さんによって開発された全文検索システムです.

次の環境で確認しました.
-Mac OS X 10.6.1
-MeCab 0.98
-zlib 1.2.3
-QDBM 1.8.77
-Hyper Estraier 1.4.13


*必要なもの [#k36b188a]

-make
-gcc
-zlib
-QDBM
-MeCab

MeCabはなくてもかまいません.
MeCabのダウンロードとインストールについては「[[MacでMeCabを使う>テキスト・マイニング/MacでMeCabを使う]]」を参照のこと.


*ダウンロード [#c3d28457]

**zlib [#mfc79129]
-zlib Home Site~
http://www.zlib.net/

current releaseのtar.gz formatのところにある「US (www.zlib.net)」をクリックして''zlib-1.2.3.tar.gz''をダウンロードします.


**QDBM [#w73b6986]
-QDBM: Quick Database Manager~
http://qdbm.sourceforge.net/

ダウンロードのところにある「最新のソース・パッケージ(バーション 1.8.77)」をクリックして''qdbm-1.8.77.tar.gz''をダウンロードします.


**Hyper Estraier [#o51619f7]
-全文検索システム Hyper Estraier~
http://hyperestraier.sourceforge.net/

ダウンロードのところにある「最新のソース・パッケージ(バーション1.4.13)」をクリックして''hyperestraier-1.4.13.tar.gz''をダウンロードします.




*インストール [#s087a8ce]

**zlib [#kafab7bc]
ダウンロードした''zlib-1.2.3.tar.gz''をダブル・クリックして展開します.

ターミナルを起動して展開されたディレクトリーに移動し,次を実行します.
#geshi(bash){{
./configure
make
sudo make install
}}


**QDBM [#l2955f6b]
ダウンロードした''qbdm-1.8.77.tar.gz''をダブル・クリックして展開します.

ターミナルを起動して展開されたディレクトリーに移動し,次を実行します.
#geshi(bash){{
./configure --enable-zlib
make mac
make check-mac
sudo make install-mac
}}


**Hyper Estraier [#u0e7cf55]
ダウンロードした''hyperestraier-1.4.13.tar.gz''をダブル・クリックして展開します.

ターミナルを起動して展開されたディレクトリーに移動し,次を実行します.
#geshi(bash){{
./configure --enable-zlib --enable-mecab
make mac
make check-mac
sudo make install-mac
}}

MeCabを使わない場合は''--enable-mecab''を省略します.

Yosemite (OS-X 10.10) だと
Yosemite (10.10) だと
#geshi(bash){{
ld: symbol(s) not found for architecture x86_64
}}
というエラーが出てコンパイル(正確にはコンパイル後のリンク)ができなくなりました.

そこで,configureした後にMakefileの
#geshi(bash){{
LIBS = -lqdbm -lz -liconv -lm -lc
}}
の行の最後に -stdlib=libstdc++ を追加し,
#geshi(bash){{
LIBS = -lqdbm -lz -liconv -lm -lc -stdlib=libstdc++
}}
としたらコンパイルできました.


*使い方 [#hd679b45]

**インデックスの作成 [#q031c24c]

#geshi(bash){{
estcmd create -acc -xs index
}}

''-acc''でN-gramの替わりに形態素解析を使用,''-xs''で文書数が50,000件未満,''index''でインデックス名を指定しています.


**文書の追加 [#dc17b0c6]

#geshi(bash){{
estcmd gather -ft -il ja -lt -1 -um index path
}}

''-ft''でプレーン・テキストを指定,''-il ja''で日本語を指定,''-lt -1''ですべてのテキストを解析,''-um''でMeCabを使用,''index''でインデックス名を指定,''path''で文書が格納されているディレクトリーのパスを指定しています.


**インデックスの最適化 [#g4f98501]

#geshi(bash){{
estcmd optimize index
}}


**文書の検索 [#t9c59887]

#geshi(bash){{
estcmd search -vh index '検索 OR search'
}}

''-vh''でスニペット付きの見やすい形で表示,''index''でインデックス名を指定,''検索 OR search''で検索式を指定しています.


*Xcodeによるプログラミング [#m17bc986]

「[[プログラミング・ガイド:http://hyperestraier.sourceforge.net/pguide-ja.html]]」のプログラムがそのまま動きます.

新規プロジェクトを「''Application''」の「''Command Line Tool''」でTypeを「''C''」にして作成し,main.cにサンプル・プログラムを貼付けます.

プロジェクトを選択して「情報」を開き,「ビルド」の「ライブラリ検索パス」に「''/usr/local/lib''」,「ヘッダ検索パス」に「''/usr/local/include''」,「他のリンカフラグ」に「''-lm -liconv -lz -lqdbm -pthread -lresolv -lestraier''」を追加します((「ライブラリ検索パス」と「ヘッダ検索パス」に追加するパスはzlibとQDBMのインストール先に依存します.)).
プログラミング・ガイドには「-lnsl」も必要と書いてありますが,Mac OS Xでは不要です.(付けるとコンパイルできません.)

実行可能ファイルを選択して「情報」を開き,インデックスがあるディレクトリーを「作業ディレクトリの設定先」に指定すれば,「ビルドと実行」ができます.


*検索スコアを取得する [#u4c29d10]

検索スコアを取得するプログラムを作成しました.
#geshi(c){{
/*
 *  search.c
 *  search for Hyper Estraier
 *
 *
 *  ./search NAME QUERY
 *
 *  NAME   インデックス名
 *  QUERY  クエリー
 *
 *
 *  Created by Tohgoroh Matsui on 2011.05.16
 */

#include <estraier.h>
#include <stdio.h>
#include <string.h>

int main (int argc, const char * argv[]) {
  const char *name  = argv[1];  // インデックス名
  const char *query = argv[2];  // クエリー
  
  ESTDB *db;
  ESTCOND *cond;
  int ecode, *res, num;

  int i;

  if (!(db = est_db_open(name, ESTDBREADER, &ecode))) {
    fprintf(stderr, "Error: %s\n", est_err_msg(ecode));
    return 1;
  }
  
  cond = est_cond_new();                      // 検索条件
  est_cond_set_phrase(cond, query);           // クエリー
  est_cond_set_options(cond, ESTCONDSCFB);    // スコア取得オプション
  res = est_db_search(db, cond, &num, NULL);  // 検索

  for (i = 0; i < num; i++) {
    // 検索された文書のidとスコアを表示
    printf("%d, %d\n", res[i], est_cond_score(cond, i));
  }
  
  est_cond_delete(cond);
  free(res);
  
  if (!est_db_close(db, &ecode)) {
    fprintf(stderr, "Error: %s\n", est_err_msg(ecode));
    return 1;
  }
  
  return 0;	
}
}}

検索スコアを取得するには,検索を実行する前に検索条件にESTCONDSCFBオプションをセットします.


*参考文献 [#b2d49996]
-[[Hyper Estraierの設計と実装:http://www.slideshare.net/rawwell/hyper-estraier-presentation]] | 平林幹雄 | SlideShare
-[[Hyper Estraierプログラミング・ガイド:http://fallabs.com/hyperestraier/pguide-ja.html]] | Mikio Hirabayashi
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS