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を抽出できました。

参考