1歳9ヶ月の娘がめかぶ大好きなのでMacにMecabを入れて遊んでみます。
前提環境
- macOS Catalina 10.15.6
- Pythonとpipインストール済
- Homebrewインストール済
手順
1. MeCabをインストールする
Homebrewを入れてあるのでこちらで。
$ brew install mecab
また、MeCabでは辞書を入れて使う必要があるので、MeCab用の辞書として各所でオススメされているIPAの辞書を入れます。
※辞書にもシステム辞書とユーザ辞書の2種類があって、IPAの辞書はシステム辞書だそう。
$ brew install mecab-ipadic
2. Pythonモジュールをインストール
$ pip install mecab-python3
3. サンプルを動かす
以下のサンプルを動かしてみます。
import MeCab
m = MeCab.Tagger('-d /usr/local/lib/mecab/dic/ipadic')
print(m.parse("1歳9ヶ月の娘がめかぶ大好きなのでMacにMecabを入れて遊んでみます。"))
実行結果は以下のようになりました。
1 名詞,数,*,*,*,*,*
歳 名詞,接尾,助数詞,*,*,*,歳,サイ,サイ
9 名詞,数,*,*,*,*,*
ヶ月 名詞,接尾,助数詞,*,*,*,ヶ月,カゲツ,カゲツ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
娘 名詞,一般,*,*,*,*,娘,ムスメ,ムスメ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
め 名詞,一般,*,*,*,*,め,メ,メ
かぶ 動詞,自立,*,*,五段・ラ行,体言接続特殊2,かぶる,カブ,カブ
大好き 名詞,形容動詞語幹,*,*,*,*,大好き,ダイスキ,ダイスキ
な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
ので 助詞,接続助詞,*,*,*,*,ので,ノデ,ノデ
Mac 名詞,一般,*,*,*,*,*
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
Mecab 名詞,一般,*,*,*,*,*
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
入れ 動詞,自立,*,*,一段,連用形,入れる,イレ,イレ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
遊ん 動詞,自立,*,*,五段・バ行,連用タ接続,遊ぶ,アソン,アソン
で 助詞,接続助詞,*,*,*,*,で,デ,デ
み 動詞,非自立,*,*,一段,連用形,みる,ミ,ミ
ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。 記号,句点,*,*,*,*,。,。,。
EOS
参考にする記事によっては、以下のように書いてあることがあります。
m = MeCab.Tagger("-Ochasen")
-Ochasen
とした場合は、先でインストールしたipaの辞書ではなく標準の辞書を使っての処理になります。
このときの実行結果も参考までに以下に乗せておきます。出力結果が微妙に違います。
% python mecab-test.py
1 1 1 名詞-数
歳 サイ 歳 名詞-接尾-助数詞
9 9 9 名詞-数
ヶ月 カゲツ ヶ月 名詞-接尾-助数詞
の ノ の 助詞-連体化
娘 ムスメ 娘 名詞-一般
が ガ が 助詞-格助詞-一般
め メ め 名詞-一般
かぶ カブ かぶる 動詞-自立 五段・ラ行 体言接続特殊2
大好き ダイスキ 大好き 名詞-形容動詞語幹
な ナ だ 助動詞 特殊・ダ 体言接続
ので ノデ ので 助詞-接続助詞
Mac Mac Mac 名詞-一般
に ニ に 助詞-格助詞-一般
Mecab Mecab Mecab 名詞-一般
を ヲ を 助詞-格助詞-一般
入れ イレ 入れる 動詞-自立 一段 連用形
て テ て 助詞-接続助詞
遊ん アソン 遊ぶ 動詞-自立 五段・バ行 連用タ接続
で デ で 助詞-接続助詞
み ミ みる 動詞-非自立 一段 連用形
ます マス ます 助動詞 特殊・マス 基本形
。 。 。 記号-句点
EOS
ちなみに-Ochasenの部分はmecabの出力モードで
mecabrc: (デフォルト)
-Ochasen: (ChaSen 互換形式)
-Owakati: (分かち書きのみを出力)
-Oyomi: (読みのみを出力)
とのこと。via PythonとMeCabで形態素解析(on Windows) - Qiita
ここまでで、環境構築と簡単なコードの実行まで出来ました。
頻出単語をカウントする
もう少し実際に近い処理として、まとまった文章を与えて頻出単語をカウントしてみます。
参考:Pythonで文章中の頻出単語を抽出する方法 | データ分析Navi| データ分析Navi
import MeCab
import collections
m = MeCab.Tagger('-d /usr/local/lib/mecab/dic/ipadic')
text = ("2018年のJaSST東京で柴田さんの講演にこの本が出てきた記憶があり、柴田さんのいちファンとして購入。"
"日本で言うところのソニックガーデンさん的位置づけの会社の話かなと思って読みました。実際にはそうだったり、違ったり。"
# 中略 https://yoshikiito.net/blog/archives/2335/ の本文全部をtextという変数に入れてます。
"ソフトウェア業界で自分の身の回りのチームや組織に対してなにか変えていこう、新しいことをやっていこう、という人に読んでほしい本でした。")
m = MeCab.Tagger('-Ochasen')
node = m.parseToNode(text)
words = []
while node:
hinshi = node.feature.split(",")[0]
if hinshi in ["名詞", "動詞", "形容詞"]:
origin = node.feature.split(",")[6]
words.append(origin)
node = node.next
c = collections.Counter(words)
print(c.most_common(20))
実行結果が以下。
% python mecab-test.py
[('よう', 9), ('こと', 8), ('*', 6), ('的', 5), ('会社', 5), ('の', 5), ('自分', 5), ('文化', 5), ('失敗', 5), ('話', 4), ('安全', 4), ('もの', 4), ('さん', 3), ('本', 3), ('ところ', 3), ('会議', 3), ('人', 3), ('喜び', 3), ('実験', 3), ('組織', 3)]
参考記事を見つつ、名詞・動詞・形容詞について、渡した文字列の中から頻出のトップ20を抽出できました。