毎日テキストマイニング

180日間、毎日テキストマイニングをするブログです

2018/6/28【6日目】頻出単語の数を調べてAKBの上位のメンバーがどんなことを呟いているのか調べる

単語の出現回数を数える

昨日の時点で品詞別のテキストの出力ができましたので、今回はこれらの単語の出てきた数を数えたいと思います。 単語の数を数えるのはCounterライブラリを使えばいいらしいです。とりあえず、入れてみます。

pip install collections

実行結果。

  Could not find a version that satisfies the requirement collections (from versions: )
No matching distribution found for collections
You are using pip version 9.0.1, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

エラー。調べてみたんですが、Counter最初からPythonに入っているみたいですね。

from collections import Counter

コード中にこれを追加することでCounterが使えるようです。

とりあえず、何も考えずにCounterを追加してみます。

     if syurui[0] =="動詞":
             count = Counter(syurui[6])
             print(count)

実行結果。

Counter({'や': 1, 'っ': 1, 'て': 1, 'く': 1, 'る': 1})
Counter({'す': 1, 'ぎ': 1, 'る': 1})
Counter({'あ': 1, 'り': 1, 'え': 1, 'る': 1})
Counter({'す': 1, 'る': 1})
Counter({'み': 1, 'る': 1})
Counter({'や': 1, 'る': 1})
Counter({'頂': 1, 'く': 1})
(以下、中略)

うーん、求めているのと違いますね。今のままですと言葉が全部分解されているようです。 どうすればいいんだろう。今のオブジェクトのクラスがいまいちわかっていないので、クラスを出力してみます。

print(syurui.__class__.__name__)
list
list
list
(中略)

リストですね(それはそうだ)。

このリストをバラさないようにするには、また別のリストに付け加えればよさそうです。word = []という空のリストを作り、そこにappndメソッドでテキストを付け加えていきます。

word = []

for hinshis in kaigyou:
     tab = hinshis.split('\t')
     if len(hinshis) >= 4:
         syurui = tab[1].split(",")
         if syurui[0] == "動詞":
             word.append(syurui[6])
             print(word)

実行結果

['やってくる']
['やってくる', 'すぎる']
['やってくる', 'すぎる', 'ありえる']
['やってくる', 'すぎる', 'ありえる', 'する']
['やってくる', 'すぎる', 'ありえる', 'する', 'みる']
['やってくる', 'すぎる', 'ありえる', 'する', 'みる', 'やる']
['やってくる', 'すぎる', 'ありえる', 'する', 'みる', 'やる', '頂く']
['やってくる', 'すぎる', 'ありえる', 'する', 'みる', 'やる', '頂く', 'たつ']
['やってくる', 'すぎる', 'ありえる', 'する', 'みる', 'やる', '頂く', 'たつ', '書く']
['やってくる', 'すぎる', 'ありえる', 'する', 'みる', 'やる', '頂く', 'たつ', '書く', '下さる']
['やってくる', 'すぎる', 'ありえる', 'する', 'みる', 'やる', '頂く', 'たつ', '書く', '下さる', 'ある']
['やってくる', 'すぎる', 'ありえる', 'する', 'みる', 'やる', '頂く', 'たつ', '書く', '下さる', 'ある', '頑張る']

ん、何かおかしいですね。まぁ、ひとまずこれでCounterに食わせてみます。

count = Counter(word)
print(count)

実行結果。

Counter({'やってくる': 1})
Counter({'やってくる': 1, 'すぎる': 1})
Counter({'やってくる': 1, 'すぎる': 1, 'ありえる': 1})
Counter({'やってくる': 1, 'すぎる': 1, 'ありえる': 1, 'する': 1})
Counter({'やってくる': 1, 'すぎる': 1, 'ありえる': 1, 'する': 1, 'みる': 1})
Counter({'やってくる': 1, 'すぎる': 1, 'ありえる': 1, 'する': 1, 'みる': 1, 'やる': 1})
Counter({'やってくる': 1, 'すぎる': 1, 'ありえる': 1, 'する': 1, 'みる': 1, 'やる': 1, '頂く': 1})

うーん、どうやら、appendをするたびにprintをしてるみたいですね。printをfor文から外してみます。以下、コードの全文です。

import sys
import MeCab
# 6日目に追加
from collections import Counter

tagger = MeCab.Tagger('')
# MeCab.Tagger ("-Owakati")

text = open('kaiseki.txt', 'r')
kaisekiyou = text.read().split('¥n')
string = ' '.join(kaisekiyou)
mecab = tagger.parse(string)

kaigyou = mecab.splitlines()
word = []

for hinshis in kaigyou:
     tab = hinshis.split('\t')
     if len(hinshis) >= 4:
         syurui = tab[1].split(",")
         if syurui[0] == "動詞":
             word.append(syurui[6])
             count = Counter(word)

print(count)

実行結果

Counter({'する': 20, '見る': 8, 'みる': 7, 'くださる': 6, 'いる': 5, 'てる': 5, 'ある': 4, 'くる': 4, 'なる': 3, 'こむ': 3, '書く': 2, '頑張る': 2, '持つ': 2, 'せる': 2, 'いただく': 2, '撮る': 2, '覚える': 2, '終わる': 2, 'くれる': 2, 'つなぐ': 2, 'やってくる': 1, 'すぎる': 1, 'ありえる': 1, 'やる': 1, '頂く': 1, 'たつ': 1, '下さる': 1, 'ずる': 1, '食べる': 1, 'もらう': 1, '致す': 1, 'ふる': 1, 'まつ': 1, 'くちる': 1, 'づける': 1, '歌う': 1, '着る': 1, '増える': 1, '作れる': 1, '知る': 1, '買う': 1, '思う': 1, 'あり': 1, 'なれる': 1, 'なさる': 1, 'めぐる': 1, 'く': 1, '飲み込む': 1, '買い求める': 1, '聞く': 1, '観る': 1, 'おる': 1, 'かける': 1, '伝わる': 1, 'ゆく': 1, '会う': 1, '慣れる': 1, '遊ぶ': 1, '見える': 1, 'つける': 1, '抜く': 1, '見つける': 1})

うまくできました。

本日の結果

今まで1週間ほど、蓄積しておいたAKBメンバーによる呟きをカウントさせてみます。

その前に本日の結果を書いておきます。 本日のAKBのメンバーによる呟きは39件でした。 呟かれたキーワードとして下記の通りです。

  • 名詞 'さん': 10, '今日': 6, 'ちゃん': 5, '時': 5, 'の': 5, '明日': 5, '写真': 5, '配信': 4, '昨日': 4, '楽しい': 3, '公演': 3, '日': 3, '方': 3, '月': 3, 'こと': 3, '部屋': 3, '笑': 3, 'ゲスト': 3, '前': 3, '撮影': 3, '大好き': 3, '目': 3, '最後': 3

  • 動詞 'する': 28, 'れる': 6, '撮る': 6, 'みる': 5, '配信': 4, 'てる': 4, 'せる': 4, '笑': 3,'ねる': 3, '観る': 3, 'なる': 3, '来る': 3, 'しまう': 3, '踊る': 3,

  • 形容詞 '楽しい': 3, '無い': 2, 'ない': 2, 'うれしい': 1, '可愛い': 1, '良い': 1, 'おしい': 1, '暑い': 1, '短い': 1, 'すごい': 1, '早い': 1

でした。

AKBメンバーの呟きを調べてみる

形容詞がその人性格を表しそうな気がしますので、まずは形容詞で行きます。全体としましては次の通りでした(6月23〜28日のAKBメンバーによる呟き)。

'楽しい': 23, 'すごい': 18, '嬉しい': 18, 'ない': 14, '可愛い': 13, 'いい': 10, '良い': 7, '無い': 6, '暑い': 5, 'かわいい': 4, 'よい': 4, '短い': 3, '早い': 3, '惜しい': 3, 'っぽい': 3, '欲しい': 3, 'うれしい': 2, 'おしい': 2, '悲しい': 2, '新しい': 2, '珍しい': 2, '凄い': 2, '美味しい': 2, '寒い': 1, '怖い': 1, '遅い': 1, '素晴らしい': 1, '長い': 1, '強い': 1, '若い': 1, '宜しい': 1, '多い': 1, '仲良い': 1, '正しい': 1, '寂しい': 1, '面白い': 1, 'でっかい': 1, 'ちっさい': 1, 'ものすごい': 1, '詳しい': 1, '優しい': 1, 'たのしい': 1, 'おいしい': 1, '恥ずかしい': 1, 'ほしい': 1, 'すっごい': 1, 'よろしい': 1, '白い': 1, '薄い': 1})

f:id:rimt:20180629033227p:plain

楽しい、すごい、嬉しい、といったポジティブな言葉が並びますね。それではAKBのメンバーたちがそれぞれどのような言葉を使っているのか調べて行きたいと思います。

ただ、もう3時を回ってしまっていますので、それは明日やることにします。

今日学んだこと

  • 空のリストを作ること
  • appendメソッドでリストに要素を加えられること
  • Counterライブラリで簡単に数を数えられること
  • クラスの表示の仕方(print(object.class.name))