[Python]銀河鉄道の夜をWordCloudで可視化してみた!
初めに
- WordCloudを作ってみたくて作成しました。
- コードが誤っているかもしれません(すいません)
環境
- Python 3.7.3
- Jupyter Notebook
- Windows
流れ
- Python 3.7.3
- Jupyter Notebook
- Windows
流れ
1. スクレイピングでテキストの抽出
2. MeCabを使って単語を分ける
3. WordCloudの作成
1.スクレイピング
こちらのサイトに「銀河鉄道の夜」が載っていたので、ここからテキストだけ抽出する
<div class ="main-text">
見た感じだと、この'div'をより下の階層のテキストを抽出すれば大丈夫そう!
import urllib.request
from bs4 import BeautifulSoup
text = []
#対象サイトのURL
url = 'https://www.aozora.gr.jp/cards/000081/files/456_15050.html'
html = urllib.request.urlopen(url)
soup = BeautifulSoup(html,'html.parser')
#classではなくclass_とすることに注意する
ginga = soup.findAll('div' , class_= 'main_text')
for i in ginga:
#テキストだけ取り出し追加していく
text.append(i.text)
#ginga.txtという名前でテキストファイルとして保存する
file = open('ginga.txt','w',encoding='utf-8')
file.writelines(text)
file.close()
テキストファイルの確認
2. MeCabを使って単語を分ける
MeCabとは対象となる言語の文法や単語の品詞情報をもとに、文章を形態素(単語が意味を持つ最小の単位)に分解、解析してくれるものです。
詳しくは下のサイトを参考にしてください
【技術解説】形態素解析とは?MeCabインストール手順からPythonでの実行例まで
https://mieruca-ai.com/ai/morphological_analysis_mecab/
import MeCab
#保存したテキストファイルをひらく
data = open("ginnga.txt","rb").read()
text = data.decode('utf-8')
mecab = MeCab.Tagger("-ochasen")
#perseToNodeで形態素解析する
#nodeに解析の結果を入れる
node = mecab.parseToNode(text)
ginga_text = []
#品詞を使って単語を分ける
while node:
#単語
word = node.surface
#品詞
hinnsi = node.feature.split(",")[0]
#配列の追加する単語を品詞で指定する
if hinnsi in ["動詞","副詞","形容詞","名詞"]:
ginga_text.append(word)
else:
#どんな言葉が追加されていないか確認(なくてもいい)
print("|{0}|の品詞は{1}だから追加しない".format(node.surface,node.feature.split(",")[0]))
print("-"*35)
node = node.next
["動詞","副詞","形容詞","名詞"]この中身を変えることで、配列に追加する単語を変えることができます。
あともう少しでWordCloudが作れます!
3.WordCloudの作成
WordCloudを作るには、モジュールをインストールする必要があります。
pip install wordcloudでインストールします。
多分、これで使えるようになったはずです。
もし使えなかったら調べて下さい(すいません)!
先ほどのファイルの下に書いていきました。
from wordcloud import WordCloud
text = ' '.join(ginga_text)
#日本語のパスらしいです
fpath = "C:/Windows/Fonts/YuGothM.ttc"
wordcloud = WordCloud(background_color="white",#背景を白に
font_path=fpath,width = 800,height=600).generate(text)
#pngで保存する
wordcloud.to_file("./ginnga.png")
結果
「よう」や「なっ」など意味が分からないのを配列に追加するときに取り除いていれば、もっと意味が分かる物ができあがります。
今回はこれで満足!
おまけ
先ほどのWordCloudを作るところを変えます
import numpy as np
from wordcloud import WordCloud ,ImageColorGenerator
from PIL import Image
text = ' '.join(ginga_text)
imagepaht = "./miyazawa.png"
img_color = np.array(Image.open( imagepaht ))
wc = WordCloud(width=800,
height = 800,
font_path=fpath,
mask = img_color,
background_color= "white",
collocations=False,).generate(text)
wc.to_file("./wc_miyazawa.png")
結果
きれいに出来てとてもうれしいー!
参考記事
米津玄師の歌詞をWordCloudで可視化してみた
Power BI × Pythonで日本語ワードクラウド ~Pythonビジュアル編~
終わりに
思っていたよりも綺麗に出来てよかったです。
次はニュースの記事を可視化してみたなーと思っています。
最後までお読みいただきありがとうございます。
Author And Source
この問題について([Python]銀河鉄道の夜をWordCloudで可視化してみた!), 我々は、より多くの情報をここで見つけました https://qiita.com/uminchu987/items/07baa1a354cf96d2564b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .