卿少納言

卿少納言

JavaScript & Japanese, Python & Polyglot, TypeScript & Translate.
zhihu
github
email
x

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

通過安裝包安裝#

先介紹一種最保險的方式,適合只需要默認解析格式的人。

首先到官網首頁 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 文檔 我愛自然語言處理

通過 mecab-python3 安裝#

上面的方法調用起來不夠靈活,無法滿足需要處理大量自定義了格式的數據的場合。而且官方也沒有提供 macOS 的安裝包,所以下面再介紹一種通過 Python 調用的方法。

先安裝第三方庫mecab-python3

pip install mecab-python3

然後用下面的指令安裝並切換到 unidic-lite 詞庫。

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

然後運行如下代碼進行下測試,沒有報錯的話,就算是安裝完成了。

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

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

|500

可能會遇到的問題#

Mecab 是基於 C++ 開發的工具,網上能找到很多工具來調用。但經常會在配置環境這一步遇到一些意想不到的問題,這裡記錄一些反饋:

以下來自 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

自定義詞庫#

通過安裝包安裝的 Meacb 自帶的詞庫是 ipadic,這個詞庫的最後一次更新是在 2003 年 5 月。

通過 mecab-python3 安裝的 unidic-lite,按照其 README 文檔的說法,是 2013 年的版本 2.1.2:

At the moment it uses Unidic 2.1.2, from 2013, which is the most recent release of UniDic that's small enough to be distributed via PyPI.

如果對解析精度有要求,更推薦安裝日本國立國語研究所維護的 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

然後測試如下代碼即可。

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 解壓後的結果來看,應該就是用的這個解析工具。另外,[[Elasticsearch]] 默認用的也是這個。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。