はじめに
前回一週間前に投稿した
PythonでMeCabを試した
の発展形です。
お題は「源氏物語」
今年の大河ドラマ、「光る君へ」見てますか?
源氏物語の内容はほぼ知らない、「光GENJIの名前の元になったヤリ〇ン光源氏の物語を書いた紫式部のベストセラー小説」くらいの前提知識で毎週楽しみに見ています。
前回MeCabで分かち書きを試したので、次は青空文庫の本のデータを使って本をマルっとワードクラウドを試してみたい。
せっかくなので今マイブームのまひろ=紫式部の源氏物語でやってみよう。
というわけです。
準備
mecab_testフォルダに以下を配置。
・Pythonのソース
・日本語フォントファイル
サブディレクトリ「Aozora_data」に青空文庫からダウンロードしたテキストファイル
(なお、青空文庫からダウンロードした源氏物語のテキストファイルは56ファイルに分かれています。)
・サブディレクトリ「WordCloudImage」を準備
ソース
青空文庫のテキストファイルに対する正規表現での整形は以下のサイトをパク参考にさせてもらいました。
https://www.gis-py.com/entry/mecab-text
GIS奮闘記
サブディレクトリ「Aozora_data」に存在するファイルを舐めて、サブディレクトリ「WordCloudImage」にワードクラウドの画像ファイルを書き出すというプログラムになってます。
import MeCab
import re
import os
from collections import Counter
from wordcloud import WordCloud
FONT_FILE = 'ipaexg.ttf' #このpyファイルと同じフォルダに配置したフォントファイル(これがないと日本語出力できない)
for pathname, dirnames, filenames in os.walk(r'Aozora_data'):
for filename in filenames:
file = r'Aozora_data' + r'/' + filename
with open(file) as f:
text = f.read()
#正規表現を使ってクリーニング
# ヘッダの除去
text = re.split('\-{5,}',text)[2]
# フッタの除去
text = re.split('底本:',text)[0]
# 最初の一の除去
#text = re.sub('一', '', text,1)
# ふりがなの削除
text = re.sub('《.+?》', '', text)
# 入力注の削除
text = re.sub('[#.+?]', '',text)
# 空行の削除
text = re.sub('\n\n', '\n', text)
# 単語の記録用リスト
words = []
tagger = MeCab.Tagger()
r = tagger.parse(text)
# 改行で分割
lines = r.splitlines()
# 最後の行(EOS)を除いてループ処理
for line in lines[0:-1]:
# タブ文字で分割
fields = line.split('\t')
# 名詞を判別(startswith()で文字列の最初が'名詞'か判別)
if fields[4].startswith('名詞'):
# リストに単語を追加
words.append(fields[0])
# Counterでカウント + (key, value) でカウント数が多い順に出力
#Counter(words).most_common()
wc = WordCloud(font_path=FONT_FILE, width=1280, height=720)
wc.fit_words(dict(Counter(words).most_common()))
wc.to_file(r'WordCloudImage/' + filename.replace('.txt', '.png'))
ワードクラウドで出力した画像ファイル
ずらっと56ファイルを並べます。
何か見えてくるでしょうか?
01桐壺
02帚木
03空蝉
04夕顔
05若紫
06末摘花
07紅葉賀
08花宴
09葵
10榊
11花散里
12須磨
13明石
14澪標
15蓬生
16関屋
17絵合
18松風
19薄雲
20朝顔
21乙女
22玉鬘
23初音
24胡蝶
25蛍
26常夏
27篝火
28野分
29御幸
30藤袴
31真木柱
32梅が枝
33藤のうら葉
34若葉(上)
35若葉(下)
36柏木
37横笛
38鈴虫
39夕霧一
40夕霧二
41御法
42まぼろし
43雲隠れ
元ファイルがめっちゃ小さいのでこれだけです。
テキストの中身を見ると以下のコメントがありました。
[#「雲隠れ」の帖は冒頭の晶子詞のみで本文はありません。]
かきくらす涙か雲かしらねどもひかり
見せねばかかぬ一章 (晶子)
対象のデータはこの2行のみでした。
44匂宮
45紅梅
46竹河
47橋姫
48椎が本
49総角
50早蕨
51宿り木
52東屋
53浮舟
54蜻蛉
55手習
56夢の浮橋
最後に
いかがでしたでしょうか?
読んだことがある人ならこれだけで読んだ気になれるかも?
「こと」が多いなー。「もの」もそこそこ多い。
この2つは除外すべきなのかな?
ということを検討してみてもいいかも。
ではでは。