借助 NlpBamboo 中文分词打造 PostgreSQL 的全文检索 « The Magic DIrk
PostgreSQL 从 8.3 开始内建了全文检索功能,对于我们来说,只需要再找一个中文分词组件即可利用 PostgreSQL 打造完善的全文检索应用。我选择的是 NlpBamboo 这个分词库。
以下是在 FreeBSD 7.2 + PostgreSQL 8.3 环境下的配置过程(FreeBSD 和 PostgreSQL 相关的安装和设置请自行找资料)。
1、安装 CMake:
1.
cd
/usr/ports/devel/cmake/
2.
make
install
clean
2、安装 crf++:
1.
cd
/usr/ports/science/crf++/
2.
make
install
clean
3、NlpBamboo 路径比较特殊,建立以下符号链接(其实不是全部需要;或者你偷懒一点,直接拷贝拉倒):
1.
ln
-s /usr/
local
/lib/libcrfpp.a /usr/lib/libcrfpp.a
2.
ln
-s /usr/
local
/lib/libcrfpp.so /usr/lib/libcrfpp.so
3.
ln
-s /usr/
local
/lib/libcrfpp.so.0 /usr/lib/libcrfpp.so.0
4、获取 NlpBamboo:
从 Google Code 取出 NlpBamboo 代码;或者从 NlpBamboo 下载打包文件。
5、进行 FreeBSD 下的补丁修改:
这里需要注意,由于 NlpBamboo 中的 bamboo 工具用到了 getline 这个函数,但 FreeBSD 默认没有提供,你可以找一个替代品。我比较偷懒,直接把相关代码注释掉了,因为我实际上根本不会在服务器上用这个工具。我都是在本地进行相关训练统计。
这个
是我当前在用的一个 Patch 文件,你可以参考。6、编译并安装 NlpBamboo:
1.
cd
nlpbamboo-
read
-only
# 这里应该是你自己解压或者代码取出后的目录
2.
mkdir
build
3.
cd
build
4.
cmake .. -DCMAKE_BUILD_TYPE=release
5.
make
all
6.
make
install
NlpBamboo 默认会安装到 /opt/bamboo/ 目录,有特殊要求,自己修改。
NlpBamboo 安装后的目录结构:
- /opt/bamboo/bin/ : 可执行程序和训练脚本文件
- /opt/bamboo/etc/ : 配置文件
- /opt/bamboo/template/ : CRF训练模板文件 (.tmpl)
- /opt/bamboo/processor/ : processor库
- /opt/bamboo/exts/ : 扩展接口
- /usr/lib/ : 动态链接库
- /usr/include/bamboo/ : C/C++的头文件
7、下载分词库数据文件:
请到 NlpBamboo 下载 index.tar.bz2 或类似文件,解压到 /opt/bamboo/index 目录:
1.
cd
/opt/bamboo/
2.
wget http://nlpbamboo.googlecode.com/files/index.
tar
.bz2
3.
tar
-jxvf index.
tar
.bz2
8、安装中文分词扩展到 PostgreSQL:
1.
cd
/opt/bamboo/exts/postgres/pg_tokenize/
2.
gmake
install
3.
cd
/opt/bamboo/exts/postgres/chinese_parser/
4.
gmake
install
5.
touch
/usr/
local
/share/postgresql/tsearch_data/chinese_utf8.stop
9、在需要的数据库中导入分词:
1.
psql -Uddlog
2.
ddlog=> \i /usr/local/share/postgresql/contrib/pg_tokenize.sql
3.
ddlog=> \i /usr/local/share/postgresql/contrib/chinese_parser.sql
10、如果没有错误,你现在可以用以下命令测试了:
1.
psql -Uddlog
2.
ddlog=> SELECT to_tsvector('chinesecfg', '我爱北京天安门');
3.
to_tsvector
4.
-----------------------------------
5.
'我':1 '爱':2 '北京':3 '天安门':4
6.
(1 row)
更多关于 NlpBamboo 的资料,可以到 NlpBamboo Wiki 里好好研究一下。
恩,最后,怎么使用,可以参看 PostgreSQL 的帮助文档。或者等有空我写个在 Django 中的使用方法。
动物凶猛,路过注意:
- 使用 PostgreSQL 8.3 更早版本的同学需要安装 tsearch2 才能使用;
- 使用 FreeBSD 7.2 更早版本的同学请先升级,NlpBamboo 用到了 7.2 才新增 strndup(3) 函数;
- 请更新 Ports 到最新版本,某些东西会有一定版本依赖,比如 NlpBamboo 需要 CMake 2.6 以上版本;