紫色のつぶやき

どうせそんな悩みは1年後にはどうでもよくなってる

テキストマイニング7日目

現在の目標です


(完)下記ページでチュートリアルを学ぶ (Google Corab上)
mocobeta.github.io

(途中)上記Google Colab上の環境をローカルでできるようにする
(未完)ローカル環境でコードの整理
(未完)Twitter APIの申請、ツイートを取得できるようにする
(未完)Googleの検索履歴をJSONファイルから取得、加工できるようにする
(未完)Twitter検索履歴をマイニングする
(未完)Google検索履歴をマイニングする
(未完)出来上がったらQiita、GitHubにアップする
 

上記ページにあるjanome モジュールとwordcloudモジュールを使ってワードクラウド(文章に頻繁に使用される言葉が大きく表示されるやつ)を作成します!

この環境をローカルに落とし込んでやろうとしてます。

早速エラーが

ModuleNotFoundError: No module named 'wordcloud'


あれ?このモジュール入れて昨日はできたんだけどな、もう一回コマンドライン上で入れましょう

pip install wordcloud
pip list

実行結果
Package         Version
--------------- -------
cycler          0.10.0
Janome          0.3.10
kiwisolver      1.2.0
matplotlib      3.2.1
numpy           1.18.4
Pillow          7.1.2
pip             20.1.1
pyparsing       2.4.7
python-dateutil 2.8.1
setuptools      40.8.0
six             1.15.0
wordcloud       1.7.0

大丈夫そうですね。
あとはまだコードはコピペしただけなのできれいにしてこんな感じ
dataフォルダに入っている daiary.txt というメモ帳ファイルをpngファイルとして吐き出します。

from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.charfilter import *
from janome.tokenfilter import *
from wordcloud import WordCloud
import matplotlib.pyplot as plt

#認識できない文字の置き換えやフィルタをかける品詞を指定する関数
def create_analyzer(udic_file, udic_type): #フィルタの条件設定
  tokenizer=Tokenizer(udic_file,udic_type=udic_type, udic_enc='utf-8') if udic_file else Tokenizer() #Tokenizerの初期化、辞書がある場合は取り入れる
  char_filters=[RegexReplaceCharFilter('《.*?》', '')]  #文字列の置き換えを行うフィルタ、複数の文字列を一気に空白に置き換えている
  token_filters=[POSKeepFilter(['名詞','形容詞','形容動詞','感動詞']),POSStopFilter(['名詞,非自立','名詞,代名詞']),ExtractAttributeFilter('base_form')]
  #Keepで対象詞、topで除くもの、Extractで基本形のみ対象にする

  return Analyzer(char_filters,tokenizer,token_filters=token_filters)

#文章を単語分割してテキストファイルとして返す関数
def split_text(src, out, udic_file='udic1.csv',udic_type='simpledic'): #ユーザー辞書の情報を適用し文章を単語分割して前処理する
  #src で渡されたファイルを読み,単語分割して out に書き出します。
  a=create_analyzer(udic_file,udic_type)
  with open(src,encoding='utf-8') as f1:
    with open(out, mode='w', encoding='utf-8') as f2:
      for line in f1:
        tokens=list(a.analyze(line))
        f2.write('%s\n' % ' '.join(tokens))

split_text('data/diary.txt', 'words.txt')
#show_wordcloud('words.txt')
with open("words.txt",encoding='utf-8')as f:
    text=f.read()

# 画像に出したくない単語リスト(本当はもっと色々)
stop_words = [u'なる', u'ある', u'いる', u'する', u'ない', u'れる', u'ため', u'こと', u'もの']

#STOPWORDS.add('自分')
wc = WordCloud(width=1920, height=1080,
               font_path="fonts/ipagp.ttf",
               max_words=100, #言葉の数を指定
               background_color="white",
               #禁止ワードを設定
               stopwords={"自分","ない","いい","よい"})

wc.generate(text)
wc.to_file('data/test_wordcloud.png')


ソースコードです。色が見にくいですね。シンタックスハイライトはうまくいっているのですが。

本日の成果を貼っておきます

f:id:hyos1-2otuk1-8sytd372:20200604223324p:plain
ワードクラウド