PythonによるMeCabの使い方まとめ
スポンサーリンク
こんにちは!
台風でアルバイトが休みになってしまい暇になりました。
今回はMecabの使い方を記事にしていこうと思います。
自分の備忘録も兼ねて、基礎的な使い方を書いていければな~と思っています。
自然言語処理をする方は一度は使うライブラリだと思うので、
みなさんにわかりやすく伝わればいいなといったところですね!
それではご覧ください。
スポンサーリンク
MeCabとは?
MeCabとは形態素解析エンジンのことを指します。
言語において意味を持つ最小単位のことを形態素と言い、文章をこれに分割することを形態素解析と言います。
MeCabは、現在世に知れ渡っている形態素解析エンジンの中で、最も有名と言っても過言ではありません。
仕組みとしては、
- ラティス構造とビタビアルゴリズムによる解析結果の推定
- CRF(系列ラベリング)を用いたコスト算出
から成り立っています。
Mecabの基本的な使い方
基本的な使い方を説明していきます。
今回使う文章は、
「日本政府に引き取られた難民は、定住促進センターで、生まれて初めての日本語を、来日からわずか3カ月間学習の後、満足な職業訓練もないまま、まったく異質な社会に投げ出される。」
です。
MeCabには出力モードが4つ存在します。
それぞれ解説していきます。
デフォルト出力
import MeCab m = MeCab.Tagger("mecabrc") line = "日本政府に引き取られた難民は、定住促進センターで、生まれて初めての日本語を、来日からわずか3カ月間学習の後、満足な職業訓練もないまま、まったく異質な社会に投げ出される。" print(m.parse(line))
ソースコードは上記のようになります。
Taggerの所に、mecabrcと書くとデフォルト出力となります。
実行結果は、
日本 名詞,固有名詞,地域,国,*,*,日本,ニッポン,ニッポン 政府 名詞,一般,*,*,*,*,政府,セイフ,セイフ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 引き取ら 動詞,自立,*,*,五段・ラ行,未然形,引き取る,ヒキトラ,ヒキトラ れ 動詞,接尾,*,*,一段,連用形,れる,レ,レ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 難民 名詞,一般,*,*,*,*,難民,ナンミン,ナンミン は 助詞,係助詞,*,*,*,*,は,ハ,ワ 、 記号,読点,*,*,*,*,、,、,、 定住 名詞,サ変接続,*,*,*,*,定住,テイジュウ,テイジュー 促進 名詞,サ変接続,*,*,*,*,促進,ソクシン,ソクシン センター 名詞,一般,*,*,*,*,センター,センター,センター で 助詞,格助詞,一般,*,*,*,で,デ,デ 、 記号,読点,*,*,*,*,、,、,、 生まれ 動詞,自立,*,*,一段,連用形,生まれる,ウマレ,ウマレ て 助詞,接続助詞,*,*,*,*,て,テ,テ 初めて 副詞,一般,*,*,*,*,初めて,ハジメテ,ハジメテ の 助詞,連体化,*,*,*,*,の,ノ,ノ 日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 、 記号,読点,*,*,*,*,、,、,、 来日 名詞,サ変接続,*,*,*,*,来日,ライニチ,ライニチ から 助詞,格助詞,一般,*,*,*,から,カラ,カラ わずか 副詞,助詞類接続,*,*,*,*,わずか,ワズカ,ワズカ 3 名詞,数,*,*,*,*,3,サン,サン カ月 名詞,接尾,助数詞,*,*,*,カ月,カゲツ,カゲツ 間 名詞,接尾,一般,*,*,*,間,カン,カン 学習 名詞,サ変接続,*,*,*,*,学習,ガクシュウ,ガクシュー の 助詞,連体化,*,*,*,*,の,ノ,ノ 後 名詞,非自立,副詞可能,*,*,*,後,ノチ,ノチ 、 記号,読点,*,*,*,*,、,、,、 満足 名詞,形容動詞語幹,*,*,*,*,満足,マンゾク,マンゾク な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ 職業 名詞,一般,*,*,*,*,職業,ショクギョウ,ショクギョー 訓練 名詞,サ変接続,*,*,*,*,訓練,クンレン,クンレン も 助詞,係助詞,*,*,*,*,も,モ,モ ない 形容詞,自立,*,*,形容詞・アウオ段,基本形,ない,ナイ,ナイ まま 名詞,非自立,副詞可能,*,*,*,まま,ママ,ママ 、 記号,読点,*,*,*,*,、,、,、 まったく 副詞,助詞類接続,*,*,*,*,まったく,マッタク,マッタク 異質 名詞,形容動詞語幹,*,*,*,*,異質,イシツ,イシツ な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ 社会 名詞,一般,*,*,*,*,社会,シャカイ,シャカイ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 投げ出さ 動詞,自立,*,*,五段・サ行,未然形,投げ出す,ナゲダサ,ナゲダサ れる 動詞,接尾,*,*,一段,基本形,れる,レル,レル 。 記号,句点,*,*,*,*,。,。,。 EOS
いい感じですね。
MeCabはとても優秀だと思います。
Chasen互換形式出力
Chasenも形態素解析ツールの1つです。
MeCabは元々Chasenをベースに作られました。(今は違います)
import MeCab m = MeCab.Tagger("-Ochasen") line = "日本政府に引き取られた難民は、定住促進センターで、生まれて初めての日本語を、来日からわずか3カ月間学習の後、満足な職業訓練もないまま、まったく異質な社会に投げ出される。" print(m.parse(line))
ソースは上記のようになります。
"-Ochasen"を付けることでChasen互換形式での出力です。
日本 ニッポン 日本 名詞-固有名詞-地域-国 政府 セイフ 政府 名詞-一般 に ニ に 助詞-格助詞-一般 引き取ら ヒキトラ 引き取る 動詞-自立 五段・ラ行 未然形 れ レ れる 動詞-接尾 一段 連用形 た タ た 助動詞 特殊・タ 基本形 難民 ナンミン 難民 名詞-一般 は ハ は 助詞-係助詞 、 、 、 記号-読点 定住 テイジュウ 定住 名詞-サ変接続 促進 ソクシン 促進 名詞-サ変接続 センター センター センター 名詞-一般 で デ で 助詞-格助詞-一般 、 、 、 記号-読点 生まれ ウマレ 生まれる 動詞-自立 一段 連用形 て テ て 助詞-接続助詞 初めて ハジメテ 初めて 副詞-一般 の ノ の 助詞-連体化 日本語 ニホンゴ 日本語 名詞-一般 を ヲ を 助詞-格助詞-一般 、 、 、 記号-読点 来日 ライニチ 来日 名詞-サ変接続 から カラ から 助詞-格助詞-一般 わずか ワズカ わずか 副詞-助詞類接続 3 サン 3 名詞-数 カ月 カゲツ カ月 名詞-接尾-助数詞 間 カン 間 名詞-接尾-一般 学習 ガクシュウ 学習 名詞-サ変接続 の ノ の 助詞-連体化 後 ノチ 後 名詞-非自立-副詞可能 、 、 、 記号-読点 満足 マンゾク 満足 名詞-形容動詞語幹 な ナ だ 助動詞 特殊・ダ 体言接続 職業 ショクギョウ 職業 名詞-一般 訓練 クンレン 訓練 名詞-サ変接続 も モ も 助詞-係助詞 ない ナイ ない 形容詞-自立 形容詞・アウオ段 基本形 まま ママ まま 名詞-非自立-副詞可能 、 、 、 記号-読点 まったく マッタク まったく 副詞-助詞類接続 異質 イシツ 異質 名詞-形容動詞語幹 な ナ だ 助動詞 特殊・ダ 体言接続 社会 シャカイ 社会 名詞-一般 に ニ に 助詞-格助詞-一般 投げ出さ ナゲダサ 投げ出す 動詞-自立 五段・サ行 未然形 れる レル れる 動詞-接尾 一段 基本形 。 。 。 記号-句点 EOS
出力は上記。
僕はChasen出力の方が好きです。
ただ出力をそのまま使う場合、品詞は2回 split する必要があり少し取り出しにくいですね。
分かち書き出力
次は分かち書きです。
僕が研究を始めてから一番使ってるやつです。
import MeCab m = MeCab.Tagger("-Owakati") line = "日本政府に引き取られた難民は、定住促進センターで、生まれて初めての日本語を、来日からわずか3カ月間学習の後、満足な職業訓練もないまま、まったく異質な社会に投げ出される。" print(m.parse(line))
"-Owakati"を付けると分かち書きです。
日本 政府 に 引き取ら れ た 難民 は 、 定住 促進 センター で 、 生まれ て 初めて の 日本語 を 、 来日 から わずか 3 カ月 間 学習 の 後 、 満足 な 職業 訓練 も ない まま 、 まったく 異質 な 社会 に 投げ出さ れる 。
見やすいように途中で改行してます。
単純に分かち書きしてくれます。
語義判別とか文書分類とかではかなり重宝します。
読み出力
読みをカタカナで出力するモードです。
import MeCab m = MeCab.Tagger("-Oyomi") line = "日本政府に引き取られた難民は、定住促進センターで、生まれて初めての日本語を、来日からわずか3カ月間学習の後、満足な職業訓練もないまま、まったく異質な社会に投げ出される。" print(m.parse(line))
"-Oyomi"です。
ニッポンセイフニヒキトラレタナンミンハ、テイジュウソクシンセンターデ、 ウマレテハジメテノニホンゴヲ、ライニチカラワズカサンカゲツカンガクシュウノノチ、 マンゾクナショクギョウクンレンモナイママ、マッタクイシツナシャカイニナゲダサレル。
あんまり使わないかな?って感じ。
注意点
Mecabなんですが、parseにかけたあとに改行コードが付与されてしまいます。
もし大規模データをMecabで扱う場合は、parseにかけた後、rstrip()を必ずしましょう。
ParseToNodeを使う方法
import MeCab m = MeCab.Tagger("-Ochasen") line = "日本政府に引き取られた難民は、定住促進センターで、生まれて初めての日本語を、来日からわずか3カ月間学習の後、満足な職業訓練もないまま、まったく異質な社会に投げ出される。" node = m.parseToNode(line) while node: print(node.surface,node.feature.split(",")[0]) node = node.next
surfaceは表層形(文章で使われているそのままの形)を返します。
featureは、詳細情報を返します。
featureは下記のような順番で出力されます。
品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
今回のソースでは、","でsplitをかけた後にインデックス[0]を取り出しているので、品詞を取り出しています。
出力した結果は以下のようになります。
BOS/EOS 日本 名詞 政府 名詞 に 助詞 引き取ら 動詞 れ 動詞 た 助動詞 難民 名詞 は 助詞 、 記号 定住 名詞 促進 名詞 センター 名詞 で 助詞 、 記号 生まれ 動詞 て 助詞 初めて 副詞 の 助詞 日本語 名詞 を 助詞 、 記号 来日 名詞 から 助詞 わずか 副詞 3 名詞 カ月 名詞 間 名詞 学習 名詞 の 助詞 後 名詞 、 記号 満足 名詞 な 助動詞 職業 名詞 訓練 名詞 も 助詞 ない 形容詞 まま 名詞 、 記号 まったく 副詞 異質 名詞 な 助動詞 社会 名詞 に 助詞 投げ出さ 動詞 れる 動詞 。 記号 BOS/EOS
特定の情報だけ取り出したい場合など、parseToNodeを使うと簡潔にプログラムを書くことができます。
ただし、parseToNodeはparseに比べてかなり遅いというデメリットがあります。
短い文章ではあまり影響はありませんが、大規模データを扱う場合には注意が必要です。
まとめ
いかがでしたか?
今回は形態素解析エンジンであるMeCabの使い方を記事にしました。
自然言語処理では必須のライブラリです。
自分の備忘録も兼ねて記事にしましたが、Mecabを初めて使う方々に読んでいただいてお役に立てれば幸いです。
また、こちらの記事もおすすめです。
www.i-like-output.work
www.i-like-output.work
それでは!