LoginSignup
0
0

はじめに

前回一週間前に投稿した
PythonでMeCabを試した
の発展形です。

お題は「源氏物語」

今年の大河ドラマ、「光る君へ」見てますか?
源氏物語の内容はほぼ知らない、「光GENJIの名前の元になったヤリ〇ン光源氏の物語を書いた紫式部のベストセラー小説」くらいの前提知識で毎週楽しみに見ています。

前回MeCabで分かち書きを試したので、次は青空文庫の本のデータを使って本をマルっとワードクラウドを試してみたい。
せっかくなので今マイブームのまひろ=紫式部の源氏物語でやってみよう。
というわけです。

準備

mecab_testフォルダに以下を配置。
・Pythonのソース
・日本語フォントファイル
 サブディレクトリ「Aozora_data」に青空文庫からダウンロードしたテキストファイル
(なお、青空文庫からダウンロードした源氏物語のテキストファイルは56ファイルに分かれています。)
・サブディレクトリ「WordCloudImage」を準備

ソース

青空文庫のテキストファイルに対する正規表現での整形は以下のサイトをパク参考にさせてもらいました。
https://www.gis-py.com/entry/mecab-text
GIS奮闘記

サブディレクトリ「Aozora_data」に存在するファイルを舐めて、サブディレクトリ「WordCloudImage」にワードクラウドの画像ファイルを書き出すというプログラムになってます。

aozora_wordcloud.ipynb
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桐壺

源氏物語01桐壺-紫式部.png

02帚木

源氏物語02帚木-紫式部.png

03空蝉

源氏物語03空蝉-紫式部.png

04夕顔

源氏物語04夕顔-紫式部.png

05若紫

源氏物語05若紫-紫式部.png

06末摘花

源氏物語06末摘花-紫式部.png

07紅葉賀

源氏物語07紅葉賀-紫式部.png

08花宴

源氏物語08花宴-紫式部.png

09葵

源氏物語09葵-紫式部.png

10榊

源氏物語10榊-紫式部.png

11花散里

源氏物語11花散里-紫式部.png

12須磨

源氏物語12須磨-紫式部.png

13明石

源氏物語13明石-紫式部.png

14澪標

源氏物語14澪標-紫式部.png

15蓬生

源氏物語15蓬生-紫式部.png

16関屋

源氏物語16関屋-紫式部.png

17絵合

源氏物語17絵合-紫式部.png

18松風

源氏物語18松風-紫式部.png

19薄雲

源氏物語19薄雲-紫式部.png

20朝顔

源氏物語20朝顔-紫式部.png

21乙女

源氏物語21乙女-紫式部.png

22玉鬘

源氏物語22玉鬘-紫式部.png

23初音

源氏物語23初音-紫式部.png

24胡蝶

源氏物語24胡蝶-紫式部.png

25蛍

源氏物語25蛍-紫式部.png

26常夏

源氏物語26常夏-紫式部.png

27篝火

源氏物語27篝火-紫式部.png

28野分

源氏物語28野分-紫式部.png

29御幸

源氏物語29御幸-紫式部.png

30藤袴

源氏物語30藤袴-紫式部.png

31真木柱

源氏物語31真木柱-紫式部.png

32梅が枝

源氏物語32梅が枝-紫式部.png

33藤のうら葉

源氏物語33藤のうら葉-紫式部.png

34若葉(上)

源氏物語34若菜(上)-紫式部.png

35若葉(下)

源氏物語35若菜(下)-紫式部.png

36柏木

源氏物語36柏木-紫式部.png

37横笛

源氏物語37横笛-紫式部.png

38鈴虫

源氏物語38鈴虫-紫式部.png

39夕霧一

源氏物語39夕霧一-紫式部.png

40夕霧二

源氏物語40夕霧二-紫式部.png

41御法

源氏物語41御法-紫式部.png

42まぼろし

源氏物語42まぼろし-源氏物語.png

43雲隠れ

元ファイルがめっちゃ小さいのでこれだけです。
テキストの中身を見ると以下のコメントがありました。
[#「雲隠れ」の帖は冒頭の晶子詞のみで本文はありません。]

かきくらす涙か雲かしらねどもひかり
見せねばかかぬ一章    (晶子)

対象のデータはこの2行のみでした。

源氏物語43雲隠れ-紫式部.png

44匂宮

源氏物語44匂宮-紫式部.png

45紅梅

源氏物語45紅梅-紫式部.png

46竹河

源氏物語46竹河-紫式部.png

47橋姫

源氏物語47橋姫-紫式部.png

48椎が本

源氏物語48椎が本-紫式部.png

49総角

源氏物語49総角-紫式部.png

50早蕨

源氏物語50早蕨-紫式部.png

51宿り木

源氏物語51宿り木-紫式部.png

52東屋

源氏物語52東屋-紫式部.png

53浮舟

源氏物語53浮舟-紫式部.png

54蜻蛉

源氏物語54蜻蛉-紫式部.png

55手習

源氏物語55手習-紫式部.png

56夢の浮橋

源氏物語56夢の浮橋-紫式部.png

最後に

いかがでしたでしょうか?
読んだことがある人ならこれだけで読んだ気になれるかも?

「こと」が多いなー。「もの」もそこそこ多い。
この2つは除外すべきなのかな?
ということを検討してみてもいいかも。

ではでは。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0