2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【作業メモ】MeCab

Last updated at Posted at 2020-10-16

目的

例えば、以下のようなマンガの感想を集計したcsvデータが複数ファイルあると想定して、その分析をします。

番号 作品タイトル 感想
1 ワンピース 面白い
2 ワンピース ドンッ!
3 わさび 俺もブラジャーを買いに行こう
4 暗殺教室 悪意こわい
5 嘘解きレトリック 弁当が飯テロ
6 ランドリーオール リドの出番増やして

MeCabのインストール

PythonでMeCabを使ってみる(Windows10 64bit)

有志の方が作成された64bit向けのインストーラーmecab-0.996-64.exeを以下からダウンロードして実行してください。

次にコマンドプロンプトで以下を実行してください

pip install mecab-python-windows

PythonでMeCabがインポートできれば、以下の実行に成功します。

import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse ("すもももももももものうち"))

CSVファイルの読み込み

口コミデータは複数のcsv形式ファイルで保存されています。
まずは、これらのファイルを結合ます。
ここではファイルの保存フォルダを"comments"とします。

import glob
import csv
import pandas as pd

DATA_PATH = "./comments/"
all_Files = glob.glob('{}*.csv'.format(DATA_PATH))

list = []
for file in all_Files:
    infile = open(file, encoding="shift_jis", errors='ignore')
    list.append(pd.read_csv(infile))
df = pd.concat(list, sort=False)

df.to_csv('merged_comment.csv', encoding='utf_8')

以上により、全てのcsvファイルがmerged_comment.csvにまとまります。

次にcsvファイルからデータを読み込みます。

files = open('merged_comment.csv', encoding="utf-8", errors='ignore')
data = pd.read_csv(files)

以下のようなデータが取得できます。

次にdataから'作品タイトル'列中に'暗殺教室'を含む行だけ抜き出します。

data = data[data['作品タイトル'] == '暗殺教室']

続いて、その中から作品へのメッセージのみを抽出します。

message = data['感想']

抽出した感想を、MeCabに渡すために文字データへ変換します。

messagelst = message.astype(str).tolist() # 文字列のリストに変換
messagestr = ' '.join(messagelst)         # 空白文字で結合
print(messagestr) 

形態素解析

MeCabを用いて、抽出したメッセージを形態素解析します。

import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse (messagestr))

メッセージが単語単位に区切られ、名詞や動詞などのラベルがつけられています。
次に、これらから名詞だけを抜き出して、頻度順に並べます。

import re
mecab = MeCab.Tagger()
parse = mecab.parse(messagestr)
lines = parse.split('\n')
items = (re.split('[\t,]', line) for line in lines)

# 名詞をリストに格納
words = [item[0]
         for item in items
         if (item[0] not in ('EOS', '', 't', '') and
             item[1] == '名詞' and item[2] == '一般')]

from collections import Counter
# 頻度順に出力
counter = Counter(words)
for word, count in counter.most_common():
    print(f"{word}: {count}")

以下のように使用されている名詞が、頻度順に並びます。

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?