用MeCab解决日文汉字的排序问题
要对一份Excle存在的上K条由日语汉字组成的书名按50音排序。
- 尝试直接用中文系统环境下的Excle直接排序 (Windows也应该是针对每个字符对应的编码顺序进行排序的。明显地看假名排在汉字前面)
- 尝试用日语操作环境下的Excle排序功能(貌似非日语环境下输入的内容无法提取假名)
- 尝试用C#的本地化排序 ↗
- 尝试用数据库排序 (把数据插入数据库,然后通过数据库内部的排序机制读取)
- 尝试用Python
- 尝试用bash
- 其实以上都不对,考虑到日语的特殊性。如果要想字典那样排序,那么就一定需要日语汉字对应的(平)假名。提取假名就需要利用到日文分词了。比如使用 mecab
CentOS 5.x 具体手顺
安装mecab
- 下载mecab本体
$ wget http://mecab.googlecode.com/files/mecab-0.98.tar.gz (我用最新版一直安装不成功,于是退回0.98版)
- 解压安装
% cd /usr/local/src
% tar zxfv mecab-X.X.tar.gz
% cd mecab-X.X
% ./configure
% make clean; make
% make check
% make install
安装词典
$ wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
$ tar zxf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801.tar.gz
$ ./configure –with-charset=utf-8
$ make $ sudo make install
经行到此处,已经可以让其标注假名读音。效果如下
之后可以利用bash对每条书名进行转换合成
% mecab -Oyomi `INPUT_FILE_NAME` -o `OUTPUT_FILE_NAME`搞定.. 然后还想试试mecab-python扩展,先把mecab升级到0.993 发现仍旧报错 **error: command 'gcc' failed with exit status 1** 查明是python-dev没装,继续装.. > $ yum list | grep python-dev > $ sudo yum -y install python-dev* 之后再把yum groupinstall "Development Tools" (build-essential) glibc-headers(libc6-dev)更新了一把,又出现 > ./.libs/libmecab.so: undefined reference to `__sync_val_compare_and_swap_4' 错误 最后还发现gcc的版本自带4.1太低了,升级到4.4。 > # yum -y install gcc44 gcc44-c++ 再次尝试安装0.98版以上的版本 > # ./configure --with-charset=utf8 --enable-utf8-only CXX='g++44' > # make && make install #### 终于可以开始安装mecab-python扩展了 > 下载mecab-python [↗](http://code.google.com/p/mecab/downloads/list) > 解压 $ tar -xzf mecab-python-0.996.tar.gz > 安装 $ python setup.py build 提示出错,于是直接打开setup.py
#!/usr/bin/env python from distutils.core import setup,Extension,os import string def cmd1(str): return os.popen(str).readlines()[0][:-1] def cmd2(str): return string.split (cmd1(str)) setup(name = "mecab-python", version = '0.993', #直接输入 py_modules=["MeCab"], ext_modules = [ Extension("_MeCab", ["MeCab_wrap.cxx",], include_dirs=[r"/usr/local/include"], #直接输入 library_dirs=[r"/usr/local/lib"], #直接输入 libraries=['mecab stdc++']) #直接输入 ])> $ sudo python setup.py install 这下终于把python扩展安装好了,赶紧试一下… 当>>> import MeCab 后提示又出错了 ImportError: libmecab.so.2: cannot open shared object file: No such file or directory 貌似是读不到libmecab.so.2这个文件,而它在/usr/local/lib下,网上查了似乎只需要把/usr/local/lib内写入 /etc/ld.so.conf 即可。
$ sudo vim /etc/ld.so.conf include ld.so.conf.d/*.conf /usr/local/lib #加这句 $ sudo /sbin/ldconfig
以后就可以直接通过Python来调用MeCab了。
(完)
####更多参考文档
mecab-pythonのインストール方法 http://tatsuyaoiw.hatenablog.com/entry/20120414/1334405065
MeCabをPythonから使う注意点とか http://shogo82148.github.com/blog/2012/12/15/mecab-python/
WindowsでMeCab Pythonを使うhttp://aidiary.hatenablog.com/entry/20101121/1290339360
CentOSにMeCabを導入
http://d.hatena.ne.jp/yuboolike/20121207/1354869309