用MeCab解决日文汉字的排序问题

#### 要对一份Excle存在的上K条由日语汉字组成的书名按50音排序。

1. 尝试直接用中文系统环境下的Excle直接排序 (Windows也应该是针对每个字符对应的编码顺序进行排序的。明显地看假名排在汉字前面)
2. 尝试用日语操作环境下的Excle排序功能(貌似非日语环境下输入的内容无法提取假名)
3. 尝试用C#的本地化排序 [↗](http://stackoverflow.com/questions/6900061/sorting-japanese-text-by-katakana-in-c-sharp)
4. 尝试用数据库排序 (把数据插入数据库,然后通过数据库内部的排序机制读取)
5. 尝试用Python
6. 尝试用bash
7. 其实以上都不对,考虑到日语的特殊性。如果要想字典那样排序,那么就一定需要日语汉字对应的(平)假名。提取假名就需要利用到日文分词了。比如使用 [mecab](http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html)


### 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对每条书名进行转换合成
<pre>% mecab -Oyomi `INPUT_FILE_NAME` -o `OUTPUT_FILE_NAME`</pre>  
搞定..
 
然后还想试试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
<pre>
#!/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++']) #直接输入
])
</pre>
>                $ 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 即可。
<pre>
$ sudo vim /etc/ld.so.conf 
include ld.so.conf.d/*.conf 
/usr/local/lib  #加这句
$ sudo /sbin/ldconfig
</pre>





**以后就可以直接通过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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值