用意
wget http://pgfoundry.org/frs/download.php/2943/textsearch_ja-9.0.0.tar.gz
wget http://mecab.googlecode.com/files/mecab-0.992.tar.gz
wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
mecabインストール
ダウンロードはココからたどる。
./configure --enable-utf8-only
make
sudo make install
※以下のエラーが発生した場合
checking if g++ supports namespaces (required) ... no
checking if g++ environment provides all required features... no
configure: error: Your compiler is not powerful enough to compile MeCab.
If it should be, see config.log for more information of why it failed.
これをインストールする
$ sudo apt-get install g++
mecab-ipdicインストール
ダウンロードはココからたどる。
./configure --with-charset=utf8
make
sudo make install
makeを実行すると以下のエラーが発生した。
error while loading shared libraries: libmecab.so.1: cannot open shared object file: No such file or directory
上記インストールでは/usr/local/libにlibmecab.so.1はインストールされるが標準では/usr/local/libにパスは通っていない。
よって以下の通りパスを通す。
$ vim /etc/ld.so.conf
include /usr/local/libを追加する。
$ ldconfig
textsearch_jaのインストール
postgresqlのソースを使ってコンパイルする
$ cd ~/download/postgresql-9.0.4/contrib/
$ cp -rf ../../textsearch_ja-9.0.0 .
$ cd textsearch_ja-9.0.0
$ vim Makefile
SHLIB_LINK = -lmecab -lpthread
$ make
$ sudo make install
※postgresqlがコンパイルされていなければ先にコンパイルする。
※SHLIB_LINKの対応はここを参照
tsearch2のインストール
$ cd ~/download/postgresql-9.0.4/contrib/tsearch2
$ make
$ sudo make install
postgresqlへデータ追加
psql dbname -f /usr/local/pgsql/share/contrib/textsearch_ja.sql
psql dbname -f /usr/local/pgsql/share/contrib/tsearch2.sql
Indexの作成
CREATE INDEX idx ON tablename USING gin(to_tsvector('japanese', title));
検索
SELECT * FROM testdb WHERE to_tsvector('japanese', title) @@ to_tsquery('japanese', '親');
構文解析
代表的なAPIは以下の通り。
to_tsvector('japanese', '検索対象') 全文検索する
to_tsquery('japanese', 'クエリ') 形態素解析する
(例1)
EXPLAIN SELECT * FROM testdb WHERE to_tsvector('japanese', title) @@ to_tsquery('japanese', '私の名前は太郎です。今、CoffeeShopにいます。');
これは、to_tsquery()で形態素解析した結果の単語がtitleに含まれているか検索します。
形態素解析の解析
SELECT * FROM ts_debug('japanese', '07/22 おはようございます。今日は、山手線が遅延しているので出勤がかなり遅れそうです。');
alias | description | token | dictionaries | dictionary | lexemes
-------+-------------------+----------+-----------------+---------------+----------
file | File or path name | 07/22 | {simple} | simple | {07/22}
blank | Space symbols | \x0B | {} | |
blank | Space symbols | おはよう | {} | |
blank | Space symbols | ござい | {} | |
blank | Space symbols | ます | {} | |
blank | Space symbols | 。 | {} | |
word | Word, all letters | 今日 | {japanese_stem} | japanese_stem | {今日}
blank | Space symbols | は | {} | |
blank | Space symbols | 、 | {} | |
word | Word, all letters | 山手線 | {japanese_stem} | japanese_stem | {山手線}
blank | Space symbols | が | {} | |
word | Word, all letters | 遅延 | {japanese_stem} | japanese_stem | {遅延}
word | Word, all letters | し | {japanese_stem} | japanese_stem | {}
blank | Space symbols | て | {} | |
word | Word, all letters | いる | {japanese_stem} | japanese_stem | {いる}
blank | Space symbols | ので | {} | |
word | Word, all letters | 出勤 | {japanese_stem} | japanese_stem | {出勤}
blank | Space symbols | が | {} | |
word | Word, all letters | かなり | {japanese_stem} | japanese_stem | {かなり}
word | Word, all letters | 遅れ | {japanese_stem} | japanese_stem | {遅れ}
word | Word, all letters | そう | {japanese_stem} | japanese_stem | {そう}
blank | Space symbols | です | {} | |
blank | Space symbols | 。 | {} | |
(23 rows)
mecabのユーザー辞書作成
最初に追加辞書用のcsvファイルを作成する。
中身は例えば以下のとおり
蘇我の馬子,1298, 1288, 60 ,名詞 ,一般名詞, 人名, 名, *, *, そがのうまこ, ソガノウマコ, ソガノウマコ
DBの検索で使いたかったので一番左以外どうでもよい。
次にコンパイル、基本はUTF-8で。
$ /usr/local/libexec/mecab/mecab-dict-index -d/usr/local/lib/mecab/dic/ipadic -u newfile.dic -f utf-8 -t utf-8 newfile.csv
辞書(newfile.dic)ができたら以下におく
$ cp newfile /usr/local/lib/mecab/dic/ipadic
次に辞書の指定
$ vim /usr/local/etc/mecabrc
userdic = /usr/local/lib/mecab/dic/ipadic/bann.dic
参考サイト
参考サイト
Linux Media Wiki (わかりやすいサイトです)
Python上でMeCabを使う(コンパイルエラー対応が記載されている)