Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

MeCabを使って、テキスト中に含まれる品詞をカウントしてみよう!

概要

このエントリは、自然言語処理の基礎を学ぶためのものです。
画像処理では画像を扱い、音声処理では音を扱いますが、自然言語処理ではテキストが対象となります。
テキストをコンピュータで処理していきたいのですが、その前段階としてテキストを部分ごとに区切らなければいけません。
テキストを部分ごとに区切る作業を形態素解析といい、それをするためにはMeCabという形態素解析エンジンを使います。
今回はMeCabを触ってみたいと思います。

インストール

Mecab のインストールにはこちらをご参考ください

MeCabで遊んでみる

parseToNode()というメソッドで、最初のnodeを取得します。
node.nextをすることによって次のnodeに移ることができます。
nodeのsurfaceには語が、featureには特徴が入っています。
例えば、バナナという単語であれば以下のようになります。
node.surface = "バナナ"
node.feature = "名詞,一般,*,*,*,*,バナナ,バナナ,バナナ"

mecab_test.py
import MeCab

text = "私はバナナが好きです。"

mecabTagger = MeCab.Tagger("-Ochasen")
node = mecabTagger.parseToNode(text)
while node:
    word = node.surface
    hinshi = node.feature.split(",")[0]
    print(word+": "+hinshi)
    node = node.next
私: 名詞
は: 助詞
バナナ: 名詞
が: 助詞
好き: 名詞
です: 助動詞
。: 記号

MeCabで品詞をカウントする

node.feature中の1番左の部分に品詞の情報が格納されています。
辞書型のデータ構造をうまく使い、品詞をカウントしていきましょう。

mecab_hinshi_test.py
# coding: utf-8
import MeCab

text = "私の好きな果物はバナナです。"

mecabTagger = MeCab.Tagger("-Ochasen")
node = mecabTagger.parseToNode(text)
hcount = {}
while node:
    hinshi = node.feature.split(",")[0]
    if hinshi in hcount.keys():
        freq = hcount[hinshi]
        hcount[hinshi] = freq + 1
    else:
        hcount[hinshi] = 1
    node = node.next
for key,value in hcount.items():
    print(key+":"+str(value))
名詞:4
助詞:2
記号:1
助動詞:2
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away