0
0

More than 1 year has passed since last update.

【Windows10,11】Python 3.10 (32bit) にMeCab, CaboChaを導入してみた

Last updated at Posted at 2022-12-22

はじめに

筆者がWindows PCにCaboChaを入れる際に情報が古くて手こずったので、備忘録として導入方法を記しておきます。

確認済動作環境

  • Windows 10, 11 (64bit)
  • Python 3.10, 3.9, 3,7 (32bit)
    【pip使用 (Anacondaは使用していません)】
  • MeCab 0.996
  • CaboCha 0.69

この記事は、色々な記事を調べて最終的に上手く行った手順を載せているだけなので予めご了承ください。

Pythonの導入

Pythonは32bit版のみ使用できます。(MeCabのみを使用したい場合は64bitでも可能です。こちらの記事等を参照して下さい。)

Python公式DLページpython JapanのDLページなどから32bit版のPythonをダウンロードし、インストーラーの指示に従ってインストールします。

形態素解析器MeCabの導入

単に1度だけインストールすると、コマンドプロンプトとPythonどちらかが文字化けしてしまうのが避けられません。以下の方法で2度インストールすると、どちらでも文字化けせずに利用できます。

  1. こちらからMeCabをダウンロードします。(Binary package for MS-Windows)
    記事作成時点では、最新版はmecab-0.996.exeです。
  2. まずは辞書の文字コード選択でUTF-8を選んでインストールします。
  3. インストールが終わったらMeCabのインストールフォルダに移動して、以下のフォルダ・ファイルの名前を変更します。インストールフォルダは変更していなければ C:\Program Files (x86)\MeCab にあります。
    • MeCab\dic\ipadic → MeCab\dic\ipadic-UTF8
    • MeCab\etc\mecabrc → MeCab\etc\mecabrc-u
  4. もう一度MeCabのインストーラーを起動して、今度はShift-JISでインストールします。
    すると、MeCab\dicの中にはipadicipadic-UTF8の2つのフォルダがあるはずです。
    MeCab\etcも同様にmecabrcmecabrc-uがあるはず。)
  5. 次にMeCab\etc\mecabrc-uファイルを以下のように書き換えます。
 ;
 ; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
 ;
-dicdir =  $(rcpath)\..\dic\ipadic
+dicdir =  $(rcpath)\..\dic\ipadic-UTF8

 ; userdic = /home/foo/bar/user.dic

参考までに、私のmecabrc-uファイルを記しておきます。

mecabrc-u
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir =  $(rcpath)\..\dic\ipadic-UTF8

; userdic = /home/foo/bar/user.dic

; output-format-type = wakati
; input-buffer-size = 8192

; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n


最後に、C:\Program Files (x86)\MeCab\binをPATHに追加してください。

ここまでで、MeCabのインストールは完了です。
コマンドプロンプトやPowerShellでmecabと実行し、次の行で何か文章を入力してEnterを押すと、形態素解析されるのが確認できます。

PS C:\Users\User> mecab
犬も歩けば棒に当たる
犬      名詞,一般,*,*,*,*,犬,イヌ,イヌ
も      助詞,係助詞,*,*,*,*,も,モ,モ
歩け    動詞,自立,*,*,五段・カ行イ音便,仮定形,歩く,アルケ,アルケ
ば      助詞,接続助詞,*,*,*,*,ば,バ,バ
棒      名詞,一般,*,*,*,*,棒,ボウ,ボー
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
当たる  動詞,自立,*,*,五段・ラ行,基本形,当たる,アタル,アタル
EOS

次にPythonでMeCabを実行できるようにします。

インストールした32bitのPythonpip install mecabを実行して、Pythonバインディングをインストールします。

Windowsに複数のPythonをインストールしている人は py コマンドを使うことができます。
py --list を実行すると、インストールされているPythonの一覧が表示されます。

PS C:\Users\User> py --list
 -V:3.11 *        Python 3.11 (64-bit)
 -V:3.10-32       Python 3.10 (32-bit)

上の例では、Python 3.10 (32-bit) を使用したいので、 pip install mecab の代わりに以下を実行します。

PS C:\Users\User> py -3.10-32 -m pip install mecab

venvを使う人はこの限りではありません。

以下のスクリプトを実行すると、Pythonでも形態素解析できるはずです。

import MeCab

tagger = MeCab.Tagger(r"-r C:\PROGRA~2\mecab\etc\mecabrc-u")
print(tagger.parse("犬も歩けば棒に当たる"))

MeCabのインストールでmecabrc-uファイルを編集し、UTF-8版の辞書を使うように設定したはずです。MeCabを実行するときに -r <mecabrcファイルのパス> のオプションを付けると、指定したmecabrcファイル内の設定でMeCabが起動します。PythonではUTF-8辞書を使いたいのでいつも -r <mecabrcファイルのパス> を指定し、コマンドプロンプトなどではShift-JIS辞書を使いたいので -r オプションは指定せずにデフォルトの mecabrc ファイルの設定で実行します。

また、 PROGRA~2Program Files (x86) のエイリアスで、 PROGRA~2 と指定することでフォルダー名からスペースが無くなる効果を持ちます。

係り受け解析器CaboChaの導入

  1. このページのダウンロードの章、「こちらから最新版をダウンロードします。」のリンクからGoogle Driveに飛び、一番下までスクロールします。すると、CaboChaの最新バージョンのファイルが見つかるので、exeファイルをダウンロードします。
    記事作成時点では、最新版は cabocha-0.69.exe です。
  2. まずは辞書の文字コード選択でUTF-8を選んでインストールします。
  3. インストールが終わったらCaboChaのインストールフォルダに移動して、以下のフォルダ・ファイルの名前を変更します。インストールフォルダは変更していなければ C:\Program Files (x86)\CaboCha にあります。
    • CaboCha\model\charset-file.txt → CaboCha\model\charset-file-u.txt
    • CaboCha\model\chunk.ipa.model → CaboCha\model\chunk.ipa-u.model
    • CaboCha\model\dep.ipa.model → CaboCha\model\dep.ipa-u.model
    • CaboCha\model\ne.ipa.model → CaboCha\model\ne.ipa-u.model
    • CaboCha\etc\cabocharc → CaboCha\etc\cabocharc-u
  4. もう一度CaboChaのインストーラーを起動して、今度はShift-JISでインストールします。
  5. 次にCaboCha\etc\cabocha-uファイルを以下のように書き換えます。

[6行目]

-charset-file = $(rcpath)\..\model\charset-file.txt
+charset-file = $(rcpath)\..\model\charset-file-u.txt

[39行目]

-parser-model  = $(rcpath)\..\model\dep.ipa.model
+parser-model = $(rcpath)\..\model\dep.ipa-u.model
 # parser-model  = $(rcpath)\..\model\dep.ipa.model
 # parser-model  = $(rcpath)\..\model\dep-tournament.ipa.model
 # parser-model  = $(rcpath)\..\model\dep.juman.model

[48行目]

 # Chunker model file name
-chunker-model = $(rcpath)\..\model\chunk.ipa.model
+chunker-model = $(rcpath)\..\model\chunk.ipa-u.model
 # chunker-model = $(rcpath)\..\model\chunk.ipa.model
 # chunker-model = $(rcpath)\..\model\chunk.juman.model
 # chunker-model = $(rcpath)\..\model\chunk.unidic.model

[54行目]

 # NE model file name
-ne-model = $(rcpath)\..\model\ne.ipa.model
+ne-model = $(rcpath)\..\model\ne.ipa-u.model
 # ne-model = $(rcpath)\..\model\ne.ipa.model
 # ne-model = $(rcpath)\..\model\ne.juman.model
 # ne-model = $(rcpath)\..\model\ne.unidic.model

[59行目] (mecabrcのインストール先はデフォルトのものを示しています。適宜変えてください)

 # mecabrc
-# mecabrc = somewhere/mecabrc
+mecabrc = C:\Program Files (x86)\MeCab\etc\mecabrc-u

参考までに、私のcabocharc-uファイルを記しておきます。

cabocharc-u
#
# default cabocharc file
#
charset = SHIFT-JIS

charset-file = $(rcpath)\..\model\charset-file-u.txt

posset = IPA
# posset = IPA
# posset = JUMAN
# posset = UNIDIC

# Output Format
#  0 - tree
#  1 - lattice
output-format = 0

# Input Layer
#  0 - RAW sentence layer (MeCab only)
#  1 - POS tagged layer (default)
#  2 - POS tagged and Chunked layer
#  3 - POS tagged, Chunked and Feature selected layer
input-layer = 0

# Output Layer
#  1 - POS tagged layer (MeCab only)
#  2 - Chunked layer
#  3 - Chunked and Feature selected layer
#  4 - Parsed layer (default)
output-layer = 4

# Output NE
# 0 - no output
# 1 - output NE with    Chunk Constraint
# 2 - output NE without Chunk Constraint
ne = 0

# Parser model file name
parser-model = $(rcpath)\..\model\dep.ipa-u.model
# parser-model  = $(rcpath)\..\model\dep.ipa.model
# parser-model  = $(rcpath)\..\model\dep-tournament.ipa.model
# parser-model  = $(rcpath)\..\model\dep.juman.model
# parser-model  = $(rcpath)\..\model\dep-tournament.juman.model
# parser-model  = $(rcpath)\..\model\dep.unidic.model
# parser-model  = $(rcpath)\..\model\dep-tournament.unidic.model

# Chunker model file name
chunker-model = $(rcpath)\..\model\chunk.ipa-u.model
# chunker-model = $(rcpath)\..\model\chunk.ipa.model
# chunker-model = $(rcpath)\..\model\chunk.juman.model
# chunker-model = $(rcpath)\..\model\chunk.unidic.model

# NE model file name
ne-model = $(rcpath)\..\model\ne.ipa-u.model
# ne-model = $(rcpath)\..\model\ne.ipa.model
# ne-model = $(rcpath)\..\model\ne.juman.model
# ne-model = $(rcpath)\..\model\ne.unidic.model

# mecabrc
mecabrc = C:\Program Files (x86)\MeCab\etc\mecabrc-u

最後に、C:\Program Files (x86)\CaboCha\binをPATHに追加してください。

ここまでで、CaboChaのインストールは完了です。
コマンドプロンプトやPowerShellでcabochaと実行し、次の行で何か文章を入力してEnterを押すと、係り受け解析されるのが確認できます。

PS C:\Users\User> cabocha
私は今日、近所の人と天気の話をしてから学校へ向かった。
      私は---------------D
      今日、-------------D
        近所の-D         |
            人と---D     |
            天気の-D     |
                話を-D   |
              してから---D
                  学校へ-D
                向かった。
EOS

次にPythonでMeCabを実行できるようにします。

インストールした32bitのPythonpip install cabocha-pythonを実行して、Pythonバインディングをインストールします。

以下のスクリプトを実行すると、Pythonでも同様に係り受け解析できるはずです。

import CaboCha

cabocha = CaboCha.Parser(r"-r C:\PROGRA~2\cabocha\etc\cabocharc-u")
result_tree = cabocha.parse("私は今日、近所の人と天気の話をしてから学校へ向かった。")
print(result_tree.toString(CaboCha.FORMAT_TREE))

これで、MeCabとCaboChaを利用できるようになりました。

お疲れ様でした!

2023/2/3 追記

@KoichiYasuoka さんよりご指摘頂いた内容を追記します。
cabocha-pythonにはこのようなバグが残っており、使う際には注意が必要です。
UniDic2UDというライブラリはこのバグに対処されており、こちらのページにもあるようにCaboCha風にコードを書くことも可能なようです。

参考ページ

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0