Mecab 安装指北

稍微详细地介绍下日语自然语言处理会用到的工具 Mecab 的安装方法

Mecab 安装指北

前言

如果只是少量分析的话,网上有现成的工具比如 Web ちゃまめ,在线即可解析。

网上关于 Meacb 的安装教程不少,但仔细一看往往觉得写得过于随意,只有日文分词器 Mecab 文档 我爱自然语言处理这篇翻译官方文档的文章有细细研读的价值。此外 ,Mecab 日语分词工具的简单使用 - FreeMdict Forum 里的相关讨论也是值得一读。(如果有不错的教程欢迎补充出来。

在进入正题前,简单提一下影响「形态素解析」的 2 个关键要素:基于不同算法开发的形态素解析器和形态素解析辞典。

解析器能看到不少,比如 awesome-japanese-nlp-resources就能找到一大堆用各种语言开发、针对各种使用场景优化的解析器,但形态素解析辞典就比较单一了,目前一般以 ChaSenJUMANUnidic 辞書 三家为主,其中 ChaSen 最新版 2.4.5 更新时间 2012 年 6 月 25 日 ,JUMAN 最新版 1.02 更新时间 2017 年 1 月 12 日,只有 Unidic 辞書还能在最近 5 年内保持一年一更的频率。

目前来说,运用最广的开源形态素解析器就是 Meacb 了,下面就讲解下如何在 Windows 下安装使用,只要记住「形态素解析= 形态素解析器+形态素解析辞典」,安装其他形态素解析器也不会有太大的问题。

先提供一个备份的安装文件:
https://www.123pan.com/s/iGz0Vv-svEVh.html

Windows 端安装教程

首先到官网首页 MeCab: Yet Another Part-of-Speech and Morphological Analyzer下载官方提供的安装包:https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7WElGUGt6ejlpVXc。(备份安装包的对应路径: 形态素解析>形态素解析器>mecab)

(网上能看到各种第三方库,其中一些第三方库自带了 Mecab 安装包,所以不用安装,但版本可能不是最新版的 0.996,所以更推荐像本篇文章一样,自己动手从头开始安装。)

安装时注意勾选utf-8编码,其他地方一直下一步即可。

|500

注:可以更改程序路径,但更改后可能要手动添加到环境变量。其实 Meacb 的本体程序占用空间不大,个人觉得没有必要改路径。(主要是如果出了问题,可能得老老实实重装一遍 2333)

确认安装好 Mecab 后,使用pip install mecab-python3安装第三方库,安装完成后运行如下代码进行下测试,没有问题就算是安装完成了。

import MeCab
tagger = MeCab.Tagger("-Owakati")
print(tagger.parse("天気が良いから、散歩しましょう。").split())

tagger = MeCab.Tagger()
print(tagger.parse("天気が良いから、散歩しましょう。"))
|500

可能会遇到的问题

Mecab 是基于C++开发的工具,网上能找到很多种调用方式。但使用其他方法调用 Mecab 时,经常会在配置环境这一步遇到一些意想不到的问题,这里记录一些反馈 :

以下来自 amob的反馈

首先,pip install一些基于C++的python库,要运行visual studio自带的命令行’Native(or Cross) Tools Command Prompt’,而不是系统默认的cmd。
也忘了之前看哪个坑人的mecab教程,因为mecab用命令行默认编码文字会无法显示,在注册表添加了autorun项设置了默认UTF-8,这也会影响Visual Studio环境的正常运行。。。
然后还是报错’Microsoft Visual C++ 14.0 is required’,才知道只要运行一句: pip install --upgrade setuptools
大功告成
参考网页:
visual studio:x64 Native Tools Command Prompt for VS 2019初始化失败_script “vsdevcmd\ext\active” could not be found.-CSDN博客
python pip on Windows - command ‘cl.exe’ failed - Stack Overflow
‘Microsoft Visual C++ 14.0 is required’ in Windows 10 - Microsoft Community

macOS 安装教程

macOS不用安装上面的文件,直接使用mecab-python3第三方库即可。

pip install mecab-python3

可以使用下面的指令快速安装切换到 unidic-lite 词库。

pip install unidic-lite
pip install --no-binary :all: mecab-python3

自定义词库

通过上述方法安装的 Meacb 自带的的词库是 ipadic,这个词库的最后一次更新是在 2003 年 5 月了,所以更推荐安装日本国立国语研究所维护的 Unidic 辞書。如果没有特殊需求,下载「現代書き言葉 UniDic」的最新版即可https://clrd.ninjal.ac.jp/unidic_archive/2302/unidic-cwj-202302.zip(注: 2023 年 3 月 24 号更新,于 2024 年 2 月 23 日确认为最新版)(备份路径: 形态素解析> 形态素解析辞典> UniDic)

解压文件时注意文件夹名,最好是unidic-cwj-3.1.1(如果不是这么命名,请修改后续代码的dic_path)。

|500

然后到 Mecab 的安装路径(如果安装时没有更改,那么应该是在C:\Program Files (x86)\MeCab\dic\ipadic),在dic文件夹下找到ipadic文件夹里面的dicrc
|500

复制到unidic-cwj-3.1.1文件夹即可,复制时应该会有下面的提示,选择「替换目标中的文件即可」,如果没有,请注意检查路径。
|500

然后测试如下代码进行测试即可。

import os
import MeCab

# 下面路径请和实际的安装路径保持一致,为了和截图保持统一,修改了文件夹的名字
dic_path = "D:\00temp\unidic-cwj-3.1.1"
tagger = MeCab.Tagger(
    '-r nul -d {} -Ochasen'.format(dic_path).replace('\\', '/'))

text = "天気が良いから、散歩しましょう。"
print(type(tagger.parse(text)))
print(tagger.parse(text).split("\n"))
print(tagger.parse(text))

mecab-ipadic-NEologd

mecab-ipadic-NEologd : Neologism dictionary for MeCab
项目地址: https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
许可证:Apache License, Version 2.0

如项目名中的「Neologism」一样,这个形态素解析辞典对于新词有较好的解析效果,不过需要自己编译源码,我没有折腾过,等大佬们出一个教程啦。

参考

Mecab 日语分词工具的简单使用 - FreeMdict Forum :提供了非常详细的说明和示例代码。

其他形态素解析器

前面提到了 awesome-japanese-nlp-resources可以找到非常多的形态素解析器,除了根据具体的使用场景外,不妨看看MeCab の開発経緯里对当时其他形态素解析器的评价:

Juman 以前の商用的に配布されていた形態素解析器は, 辞書や品詞体系 連接規則はほぼ固定されており, ユーザ自身自由に定義できなかった. Juman は これらの定義すべて外部に出し自由な定義が可能になった.
辞書は比較的入手しやすいが, 連接コストや単語生起コストの定義は 人手によって行わざるをえなかった. 解析ミスを発見するたびに副作用が無い範 囲で連接コストを修正する必要があり, 開発コストが大きい.
また, Juman は日本語の形態素解析として開発されていたので, 未知語処理が日本語に特化されており, 未知語処理の定義を 自分で与えることはできない. また, 品詞は 2 階層までに固定されており, 品詞体系には一種の制限がある.

ChaSen の貢献の 1 つは, 統計処理 (HMM) によって連接コストや単語生起コストを 推定するようになった点にある. この処理のおかげで, 解析ミスを 蓄積するだけで自動的にコスト値を推定できるようになった. さらに, 品詞階層も無制限になり, 品詞体系を含めて(本当の意味で) 自由に定義できるようになった.
しかし, 複雑な品詞体系にすればするほど, データスパースネスの問題が 発生する. HMM を使う場合, HMM の内部状態(Hidden Class)を 1 つに固定する 必要があるため, 各品詞から内部状態への「変換」が必要となる. 単純には 各品詞を 1 つの内部状態に割りあてればよいが, 活用まで含めて品詞を すべて展開すると, その数は 500 にも及び, 低頻度の品詞について 信頼度の高い推定量を得ることができない. 逆に, 頻度の高い「助詞」等の品詞は 語彙も含めて内部状態にしないと高い精度が得られない. 複雑な品詞体系にすればするほど, 内部状態の定義が困難になる. つまり, 現状の(複雑な)品詞体系を扱うには, HMM では力不足であり, それを補助するための人手コストが大きくなっている.
また, ChaSen にはコスト値推定モジュールが付与されていない. NAIST の内部では利用できるらしいが, 上記の理由から設定すべき パラメータが多く, 使いこなすのが困難である.
さらに, ChaSen も未知語処理もハードコーディングされており 自由に定義することはできない.

上面评价的关注点和形态素解析器的发展趋势基本一致:

  1. 形态素解析器都在抛弃基于语法规则的思路,完全转向基于统计学的纯数学算法;
  2. 放弃自定义形态素解析辞典,使用 UniDic 这样由权威机构构建维护的资源
  3. 开始尝试同时支持多种语言的解析

下面列几个我个人稍微研究过的形态素解析器,:

GiNZA - Japanese NLP Library
开发语言:Python
许可证:MIT license
最后更新时间:2023-09-25

备注:由日本公司 recruit (日:リクルート)下属 AI 研究机构 Megagon Labs 于 2019 年开源的形态素解析工具。

Kuromoji
开发语言:Java
许可证:Apache-2.0 license
最后更新时间:5 年前

备注:从 MOJi Android 端 APK 解压后的结果来看,应该就是用的这个解析工具。