概要
MeCabの返り値の意味が分からなかったので調査してまとめてみました.その上で、Pandasにその結果を移して簡便に処理するためのコードを書いてGitHubにて公開しました.
実行環境
- Python: 3.6.5
- MeCab: 0.996
- Neologd: 2018/5/8現在の最新版
- mecab-python3: 0.7
- pandas: 0.22.0
困ったところ
MeCabで「スプラトゥーンでウデマエXにならなくて悔しい。」という文字列を入力すると以下の結果が返ってくる。
スプラトゥーン 名詞,固有名詞,一般,*,*,*,Splatoon,スプラトゥーン,スプラトゥーン
で 助詞,格助詞,一般,*,*,*,で,デ,デ
ウデマエ 名詞,一般,*,*,*,*,腕前,ウデマエ,ウデマエ
X 名詞,固有名詞,一般,*,*,*,X,エックス,エックス
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
なら 動詞,自立,*,*,五段・ラ行,未然形,なる,ナラ,ナラ
なく 助動詞,*,*,*,特殊・ナイ,連用テ接続,ない,ナク,ナク
て 助詞,接続助詞,*,*,*,*,て,テ,テ
悔しい 形容詞,自立,*,*,形容詞・イ段,基本形,悔しい,クヤシイ,クヤシイ
。 記号,句点,*,*,*,*,。,。,。
EOS
タブ区切り以降のカンマ区切りの要素のそれぞれの意味がよく分からない…「MeCab 返り値」とか「MeCab 結果 見方」とか「MeCab フォーマット」とかぐぐっても出てこない…
返り値のフォーマット
CaboChaの記事が参考になりました。そこから類推するとMeCabの形式は以下の形です。
表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音
CaboChaの出力とは活用型と活用形の順番が逆になっていることに注意です。
応用例
活用の解決
同じ単語でも活用形が異なると違う文字列になってしまい、分析内容によっては不都合が生じます。例えば、文章中にどのようなキーワードが含まれているかを抽出するタスクです。以下の文章だと、「持ち」と「持つ」が異なる単語になり、期待した結果と異なる要因になりえます。
コントローラーの持ち方を変えて、ガチホコを持ったら勝てるようになった。
コントローラー 名詞,一般,*,*,*,*,コントローラー,コントローラー,コントローラー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
持ち 動詞,自立,*,*,五段・タ行,連用形,持つ,モチ,モチ
方 名詞,接尾,特殊,*,*,*,方,カタ,カタ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
変え 動詞,自立,*,*,一段,連用形,変える,カエ,カエ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
、 記号,読点,*,*,*,*,、,、,、
ガチホコ 名詞,固有名詞,一般,*,*,*,ガチホコ,ガチホコ,ガチホコ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
持っ 動詞,自立,*,*,五段・タ行,連用タ接続,持つ,モッ,モッ
たら 助動詞,*,*,*,特殊・タ,仮定形,た,タラ,タラ
勝てる 動詞,自立,*,*,一段,基本形,勝てる,カテル,カテル
よう 名詞,非自立,助動詞語幹,*,*,*,よう,ヨウ,ヨー
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
なっ 動詞,自立,*,*,五段・ラ行,連用タ接続,なる,ナッ,ナッ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
ここで、「原形」の要素を見に行けば、共に「持つ」に変換されているので、活用で頭を悩ませる必要はありません。
読みや発音に注目した解析
日本語は同じ読みや発音でも、ひらがな・カタカナ・漢字と異なる表記手法があります。発話したときにどのようなリズム感になるのかを解析したいなど(例えば詩の良し悪し判定とか)のタスクでは、この日本語の仕様は不都合です。
サンフランで土師さんが箸を持って橋の端を渡る
サンフラン 名詞,一般,*,*,*,*,*
で 助詞,格助詞,一般,*,*,*,で,デ,デ
土師 名詞,固有名詞,人名,姓,*,*,土師,ハジ,ハジ
さん 名詞,接尾,人名,*,*,*,さん,サン,サン
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
箸 名詞,一般,*,*,*,*,箸,ハシ,ハシ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
持っ 動詞,自立,*,*,五段・タ行,連用タ接続,持つ,モッ,モッ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
橋 名詞,一般,*,*,*,*,橋,ハシ,ハシ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
端 名詞,一般,*,*,*,*,端,ハジ,ハジ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡る 動詞,自立,*,*,五段・ラ行,基本形,渡る,ワタル,ワタル
EOS
「読み」や「発音」の要素を見に行けば、漢字をカタカナに変換してくれるので、処理が非常に楽になります。元々カタカナの場合は「*」になってしまうので、注意です。その際は表層形を代わりに持って来れば良いです。
Pandasで扱えるようにしました
GitHubにサンプルコードを置いたので、よろしければ使ってみてください。下のように使えます!
Python 3.6.5 |Anaconda custom (64-bit)| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from mecab_pandas import MeCabParser
>>> mp = MeCabParser()
>>> mp.parse("ケルビン強化されたと思ったけど、やっぱスパッタリー最強だわ。")
surface_form word_class class_detail1 class_detail2 class_detail3 \
0 ケルビン 名詞 一般 None None
1 強化 名詞 サ変接続 None None
2 さ 動詞 自立 None None
3 れ 動詞 接尾 None None
4 た 助動詞 None None None
5 と 助詞 格助詞 引用 None
6 思っ 動詞 自立 None None
7 た 助動詞 None None None
8 けど 助詞 接続助詞 None None
9 、 記号 読点 None None
10 やっぱ 副詞 一般 None None
11 スパッタリー 名詞 一般 None None
12 最強 名詞 一般 None None
13 だ 助動詞 None None None
14 わ 助詞 終助詞 None None
15 。 記号 句点 None None
conjugational_type conjugational_form original_form katakana pronunciation
0 None None ケルビン ケルビン ケルビン
1 None None 強化 キョウカ キョーカ
2 サ変・スル 未然レル接続 する サ サ
3 一段 連用形 れる レ レ
4 特殊・タ 基本形 た タ タ
5 None None と ト ト
6 五段・ワ行促音便 連用タ接続 思う オモッ オモッ
7 特殊・タ 基本形 た タ タ
8 None None けど ケド ケド
9 None None 、 、 、
10 None None やっぱ ヤッパ ヤッパ
11 None None None None None
12 None None 最強 サイキョウ サイキョー
13 特殊・ダ 基本形 だ ダ ダ
14 None None わ ワ ワ
15 None None 。 。 。
あとがき
コード書いたりするのは簡単でしたが、結果のフォーマットを探すのにやたらと苦労しましたこれはぼくのぐぐり力不足なんでしょうか 基本、普段プログラミングに関する情報は英語 リソースを活用しているので、やり方間違っている説がありますね。「ここにあるよ」みたいな情報があれば是非コメントください!ではでは