Dai(@never_be_a_pm)さんのTopTweetにWordCloudを追加(janome+WordCloud)

今まで、Dai(@never_be_a_pm)さんのTopTweetをPixiv用に変更したり、レンタルサーバーで動くようにしてきました。



今回は、リツイート数が多いTweetに含まれる単語の可視化をWordCloud(とJanome)を用いて実施してみました

出来上がりイメージ

チャートとTweetの間のROWにwordcloudで作成した単語マップの画像を挿入しました。下記のような感じになります。

cropped-kumaIcon_200x200-32x32 Dai(@never_be_a_pm)さんのTopTweetにWordCloudを追加(janome+WordCloud)

WordCloud用追加箇所

追加のライブラリを読み込みます。Tweetを単語に分割するのにjanomeを、頻出単語のMAPを作成するのにWordCloudを用いています。

from janome.tokenizer import Tokenizer
from wordcloud import WordCloud
import random,string
from PIL import Image
import numpy as np

また、新たにuser_wcという関数を作成してsorted_dfを引数として渡します。関数内でsorted_dfに含まれるTweetをjanomeで単語に分割してWordCloudに渡すようにしています。

def user_wc(sorted_df):
    # 日本語(Tweet)の解析
    t = Tokenizer()
    text = "NOTFOUND"
    loop = 0
    try:
        for index, tweet in sorted_df.iterrows():
            # Tweet内容を解析して単語にばらす
            # WordCloudはスペース区切りで単語を認識するので、WordCloudに認識させたい単語をスペース区切りで格納していく
            tokens = t.tokenize(tweet["text"])
            for token in tokens:
                if token.part_of_speech.split(',')[0] == u'名詞':
                    # 名詞の取得
                    text = text+" "+token.surface
                elif token.part_of_speech.split(',')[0] in [u'動詞',u'形容詞',u'副詞']:
                    # 動詞・形容詞・副詞の取得
                    # 原型で取得
                    text = text+" "+token.base_form
       #最大30Tweetを取得
            if loop == 30:
                break
            else:
                loop=loop+1
    except:
        text = "NOTFOUND"

    # WordCloud描画
    # 要約から外したい文字の一覧
    stopwords = [ u'いる', u'ある', u'なる', u'れる', u'られる', u'こと', u'できる', u'しまう', \
                  u'する', u'した', u'思う', u'くる', u'みる', u'それ', u'これ', u'あれ', u'ここ', \
                  u'いう', u'言う', u'さん', u'くん', u'ない', u'あと', u'よう', u'てる', \
                  u'いく', u'そう', u'やる', u'せる', u'させる', u'いただく', u'くださる',\
                  u'', u'https', u'co',U'http',U'RT']
    mask_path = "static/image/twitter_mask.png"
    mask_np = np.array(Image.open(mask_path))
    wordcloud = WordCloud(background_color="white", font_path="static/fonts/ipaexg.ttf",mask=mask_np,width=500,height=500,stopwords=set(stopwords)).generate(text)

    # 生成する画像名は、とりあえずランダムで生成
    chars = string.digits + string.ascii_letters
    img_name = "static/image/"+''.join(random.choice(chars) for i in range(16)) + '.png'
    wordcloud.to_file(img_name)

    return img_name

あと少し、index.html等もいじっていますが、これでリツイート数が多いTweetに含まれる単語の可視化も可能となりました。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL