トップ 履歴 一覧 Farm ソース 検索 ヘルプ RSS ログイン

形態素解析器MeCab


キーワード

最終更新時間:2019年09月04日 13時03分48秒
アフィリエイト・広告について
プライバシーポリシー

この記事はRcppMeCabとtidytextではじめるテキストマイニングシリーズの一部です。

目次


形態素解析とは

前述のように、テキストマイニングをするためには形態素解析をする必要があります。形態素解析とは、テキストを、意味のある最小単位である形態素 (単語) に分解する処理です。さらに、必要に応じて、テキストの中で使用された形態素 (表層形・出現形) を原形 (活用しない、辞書に載っているかたち) に戻す場合もあります。

形態素解析を行うソフトウェアを形態素解析器と呼びます。自然言語処理の研究者などが、様々な形態素解析器を開発、公開しています。代表的なものに以下があります。

  • MeCab: 最も広く使われている。本記事でもRcppMeCabパッケージを通じて使用する
  • JUMAN++: "単語の並びの意味的な自然さを考慮した解析" を行うため、性能が良い。旧バージョンのJUMANもある
  • Chasen: 歴史の古い形態素解析器。KH Coderなどのツールに組み込まれている
  • Janome: Pythonで書かれた形態素解析器

形態素解析器のシェアについては、正確な調査はありませんが、MeCabが広く利用されているようです。詳細は後述しますが、RからもRMeCabRcppMeCabなどのパッケージを使って呼び出すことができます。

MeCabのインストール

ここでは、WindowsとLinux (Ubuntu) にMeCabをインストールする手順を紹介します。

 Windows

Windows向けにインストーラーが提供されており、基本的には "OK" や "次へ" を押していけばインストールが完了します。インストーラーは、以下のURLで公開されています。

なお、64bit OS (最近のWindowsは大抵そうだと思いますが) では、以下の「野良ビルド版」をダウンロードした方がよいでしょう。のちほどRcppMeCabパッケージをインストールするのですが、その際に32bit版の (オフィシャルな) MeCabではエラーが出ます。[1]

インストーラーをダブルクリックすると、以下のような画面が続きます。詳細なインストール手順は、Windows10にMeCabをインストール : 私的メモなどが参考になります。




基本的に "OK" や "次へ" を押していけばよいのですが、一点、「辞書の文字コードの選択」については、"UTF-8" を選択しましょう。[2]Windowsの標準的な文字コードはShift-JISですが、近年RではUTF-8を前提とした環境が広がりつつあり、また後述するNEologd辞書もUTF-8で作成されているため、WindowsでもUTF-8を採用して環境を構築する方がなにかと便利です。ただし、MeCabをUTF-8でインストールすると、コマンドプロンプトでの使用はできなくなります。[3]コマンドプロンプトや他のソフトウェアでもMeCabを使用することがある場合は、Shift-JISでインストールしたほうがよいでしょう。

また、MeCabをコマンドプロンプトから使えるよう、環境変数PATHを通します。


エクスプローラーからMeCabをインストールしたフォルダー (C:\Program Files\MeCab\bin など) を開き、パスをコピーします。次に、Windowsボタンをクリックし、「環境変数」と入力します。すると、"環境変数を編集" というメニューが表示されます ("システム環境変数の編集" ではありません)。これを選択し、"ユーザー環境変数" 下にある "Path" を選択、"編集" ボタンを押します。そして、"新規" を選択し、コピーしたパスを貼り付けます。あとは、"OK" を押せば、MeCabがコマンドラインから実行できるようになります。

 Linux

Linux向けには、ソースコードが提供されており、手元でコンパイルしてインストールするのが、オフィシャルな手順になります。しかし、コンパイルのために開発環境を用意するのが大変であったり、コマンド操作に習熟している必要があり、少しハードルが高く感じることもあります。

そこで、Ubuntuでは apt コマンドでコンパイル済みのパッケージがインストールできます。管理者権限がある環境で、以下のようにコマンドを実行します。

sudo apt install mecab

MeCab本体と、IPA辞書というMeCab標準の辞書がインストールされます。インストール作業はこれだけです。Ubuntuは標準で文字コードがUTF-8なので、MeCabもUTF-8で動作します。

MeCabの出力

MeCabをインストールしたら、出力を確認してみましょう。Windowsでは、以下のように、サンプルテキストを「メモ帳」などで入力し、in.txt として保存します。[4]

May J.がmacOSを搭載したMacBook ProをAir DOの機内に持ち込んだ。

ファイルを保存したら、ファイルがあるフォルダーでコマンドプロンプトを開き、以下のコマンドを入力してください。

mecab in.txt -o out.txt

すると、同じフォルダーにout.txtが生成されます。「メモ帳」などで開くと、下記 (Linuxの例と同様) のような出力が得られます。

Linuxでは、以下の文字列をコピーして、ターミナルに貼り付けてください。

echo "May J.がmacOSを搭載したMacBook ProをAir DOの機内に持ち込んだ。" | mecab

いきなり変な (サンプルらしくない) テキストですが、後で辞書を追加した場合の変化を確認するために、IPA辞書における解析結果を確認しています。標準的な解析結果は以下のようになります。

May     名詞,固有名詞,組織,*,*,*,*
J       名詞,一般,*,*,*,*,*
.       名詞,サ変接続,*,*,*,*,*
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
macOS   名詞,一般,*,*,*,*,*
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
搭載    名詞,サ変接続,*,*,*,*,搭載,トウサイ,トーサイ
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
MacBook 名詞,一般,*,*,*,*,*
Pro     名詞,一般,*,*,*,*,*
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
Air     名詞,固有名詞,組織,*,*,*,*
DO      名詞,一般,*,*,*,*,*
の      助詞,連体化,*,*,*,*,の,ノ,ノ
機内    名詞,一般,*,*,*,*,機内,キナイ,キナイ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
持ち込ん        動詞,自立,*,*,五段・マ行,連用タ接続,持ち込む,モチコン,モチコン
だ      助動詞,*,*,*,特殊・タ,基本形,だ,ダ,ダ
。      記号,句点,*,*,*,*,。,。,。
EOS

解析自体はできていますが、"May J." や "MacBook Pro"、"Air DO" といった固有名詞を正しく切り分けられていません。このあたりは後述するとして、まずは出力結果がどのような要素を含んでいるか紹介します。標準的なMeCabの出力は以下のようになっています。

表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音

\t はタブです。辞書に情報が登録されていない部分は * で表示されます。テキストマイニングでは、一般に名詞や動詞、形容詞が分析の対象となり、助詞や副詞は除外することが多いです。その際に、MeCabが出力する品詞情報を使ってフィルタリングできます。

NEologd辞書

上述のように、MeCab (IPA辞書) の標準では、一部の固有名詞などを正しく解析できません。これは、IPA辞書が2007年に作成されたもので、それ以降の新しい言葉を「知らない」ためです[5]。Twitterなど、トレンドワードを多く含むテキストを解析するためには、新しい言葉をMeCabに教える必要があります。

MeCabの辞書フォーマットは公開されており、ユーザーが任意の単語を追加できます。しかし、膨大なトレンドワードを追いかけて手作業で追加することは不可能です。そこで、インターネット上の様々なテキストを収集し、自動的に最新の辞書を提供してくれる、NEologd辞書が広く使われています。NEologd辞書は週2回ほどのペースで、はてなキーワードやニュース記事などを使い、新語を追加して更新されています。

 Windowsの場合

NEologd辞書はソースコードのみの公開で、Windowsでは、コンパイルするための環境を用意するのが大変です。そのため、ここではコンパイル済みの辞書を提供しますので、利用してください。以下のURLからファイルをダウンロードしてzipファイルを展開し、C:\Program Files (x86)\MeCab\dic (32bit版) または C:\Program Files\MeCab\dic (64bit版) 下に配置してください。

 Linuxの場合

NEologd辞書を利用するにはコンパイルする必要があります。Linuxでは、開発環境[6]があれば、以下のコマンドでコンパイル、インストールができます。

git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
sudo ./bin/install-mecab-ipadic-neologd -n

最後に、インストールするか聞かれるので、yes を入力します。

辞書をインストールしたら、Windows、Linuxともに、設定ファイルにNEologd辞書を使用する設定を追加します。Windowsでは C:\Program Files (x86)\MeCab\etc (32bit版) または C:\Program Files\MeCab\etc (64bit版) 下に、Linuxでは /etc 下に、mecabrc というファイルがあります。管理者権限があるユーザーで、mecabrc ファイルを開き、以下のように編集します。

 Windowsの場合

;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
;dicdir =  $(rcpath)\..\dic\ipadic # コメントアウトする
dicdir = $(rcpath)\..\dic\mecab-ipadic-neologd

; 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

 Linuxの場合

;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
;dicdir = /var/lib/mecab/dic/debian # コメントアウトする
dicdir = /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd

; 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

WindowsとLinuxの例にほとんど違いはありませんが、いずれもデフォルトの辞書へのパスをセミコロン (;) でコメントアウトし、NEologd辞書を配置した場所へのパスを追記します。これで、MeCabが標準で使用する辞書がNeolodg辞書になります。

辞書を変更したことによる効果を確認してみましょう。Windows、Linuxともに、先ほどと同様にファイル (Windows)、標準入力 (Linux) からサンプルテキストを入力し、形態素解析の結果を確認します。

 Windowsの場合

mecab in.txt -o out.txt

NEologd辞書を使うことで、固有名詞が正しく解析できるようになりました。

 Linuxの場合

echo "May J.がmacOSを搭載したMacBook ProをAir DOの機内に持ち込んだ。" | mecab

May J.  名詞,固有名詞,人名,一般,*,*,May J.,メイジェイ,メイジェイ
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
macOS   名詞,固有名詞,一般,*,*,*,macOS,マックオーエス,マックオーエス
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
搭載    名詞,サ変接続,*,*,*,*,搭載,トウサイ,トーサイ
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
MacBook Pro     名詞,固有名詞,一般,*,*,*,MacBook Pro,マックブックプロ,マックブックプロ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
Air DO  名詞,固有名詞,一般,*,*,*,Air DO,エアドゥ,エアドゥ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
機内    名詞,一般,*,*,*,*,機内,キナイ,キナイ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
持ち込ん        動詞,自立,*,*,五段・マ行,連用タ接続,持ち込む,モチコン,モチコン
だ      助動詞,*,*,*,特殊・タ,基本形,だ,ダ,ダ
。      記号,句点,*,*,*,*,。,。,。
EOS

Linuxでも同様に、固有名詞を正しく解析できるようになりました。NEologd辞書をこまめに更新[7]することで、トレンドを反映したテキストマイニングが可能です。


  • [1]開発者の母国である韓国では、韓国語に対応した64bit版のMeCabが使用されているようで、RcppMeCabパッケージも自然に64bit版でコンパイルしようとしますが、オリジナルのMeCabは32bit版なので、エラーになります。
  • [2]上記のブログ記事でもそのようにしています。
  • [3]文字化けします。chcp 65001などでコマンドプロンプトの表示をUTF-8に変換しても、文字化けします。
  • [4]ファイル名は任意です。他の名前でも構いません。
  • [5]正確には、その他にスペースを含む形態素の切り出しルールなども関係します。
  • [6]apt install build-essential などでインストールできます。
  • [7]更新は、都度上述のインストール作業を行います。

関連ページ: R言語を学ぶための参考書籍リスト
カテゴリ: [R,データ分析,テキストマイニング,RcppMeCabとtidytextではじめるテキストマイニング]