業務の一環でWordCloudをオプションしつつ使ったのでまとめておく。
オプションとしては行動のデータを取りたかったので動詞を加えた。
とはいえ、そのままでは「する」、「ある」、「いる」や「られる」のようなノイジーな単語の頻度の高さが際立ってしまう。
言語学的には状態動詞とでも分類しようか。
そこで正規表現も流用して、平仮名のみの動詞は除いた。
厳密さはやや課題なものの、一般な動詞は漢字で表すので都合がいい。
このあたり、英語でも”kind”, "kindness"のような同じルーツの処理が気がかりだ。
しかしお向かいさんはスペース区切りが便利なため、面倒な形態素解析をわざわざやるとも思えないが。
環境整備は最後のリンクなどを参考にしてもらいたい。かなり面倒かつ環境依存性も高めなので。
特に日本語対応が面倒。
また補足的に別で用いたツイート収集も付記しておく。
ただこの手法によるツイート収集は、かなり原始的なため、APIなどを絡めたスマート化が今後の課題か。
そのAPIもイーロン・マスクやらでTwitter運営がきな臭くなっていて暗雲立ち込めるが。
python code
# -*- coding: utf-8 -*- """ Created on Sun Mar 6 12:52:52 2022 @author: ataka """ import MeCab import re from wordcloud import WordCloud FONT_PATH = "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\mpl-data\ipaexg.ttf" TXT_NAME = "dialogue_whole" stop_words = [""] def get_word_str(text): mecab = MeCab.Tagger() parsed = mecab.parse(text) lines = parsed.split('\n') lines = lines[0:-2] word_list = [] for line in lines: tmp = re.split('\t|,', line) if tmp[1] in ["名詞"]: # さらに絞り込み if tmp[2] in ["一般", "固有名詞"]: word_list.append(tmp[0]) # elif tmp[1] in ["形容詞"]: # word_list.append(tmp[0]) elif tmp[1] in ["動詞"]: #ある、するなど普遍的な状態動詞のみを除去 if not re.compile(r'^[あ-ん]+$').fullmatch(tmp[0]): word_list.append(tmp[0]) return " " . join(word_list) # テキストファイル読み込み #read_text = open(TXT_NAME + ".csv", encoding = "utf-8").read() read_text = open(TXT_NAME + ".txt", encoding = "utf-8").read() # 文字列取得 word_str = get_word_str(read_text) # 画像作成 wc = WordCloud(font_path=FONT_PATH, stopwords=stop_words, background_color='white', width=1600, height=900).generate(word_str) # 画像保存(テキストファイル名で) wc.to_file(TXT_NAME + ".png")
sample output