『Pythonによるクローラー&スクレイピング入門 設計・開発から収集データの解析・運用まで』P283~を参考にして芥川龍之介の『鼻』のテキストから上のようなワードクラウドを作成してみました。
書籍掲載のものは形態素解析にJanomeを使用していますが、今回はMeCabで行っています。辞書はipadic-neologdを使用。
また、名詞、副詞、動詞、形容詞のみ抽出し、動詞・形容詞は基礎型に変換しています。
import requests
import MeCab
from bs4 import BeautifulSoup
from wordcloud import WordCloud
import matplotlib.pyplot as plt
def get_wordcloud(text, file_path):
'''
:param text, file_path: str
:return:
'''
# ストップワードの設定。出力結果を見ながら手動で設定した。
stop_words = ["ある", "ない", "いる", "する", "の", "よう", "なる", "それ", "そこ", "これ", "こう", "ため", "そう", "れる", "られる"]
# 単語に分割し名詞、副詞、動詞、形容詞のみ抽出(動詞・形容詞は基礎型を取得)
tagger = MeCab.Tagger('-Ochasen')
pos1 = ("名詞", "副詞") # 表層形を取得する品詞
pos2 = ("動詞", "形容詞") # 基礎形を取得する品詞
node = tagger.parseToNode(text)
words = []
while node:
features = node.feature.split(",")
if (features[0] in pos1) and not (node.surface in stop_words):
words.append(node.surface)
elif (features[0] in pos2) and not (features[6] in stop_words):
words.append(features[6])
node = node.next
# wordcloudオブジェクトの作成
font_path = r"C:\WINDOWS\Fonts\SourceHanSerif-SemiBold.otf"
wordcloud = WordCloud(background_color="white", font_path=font_path, width=1600, height=1066, regexp=r"\w+").generate(" ".join(words))
# wordcloudファイル出力
wordcloud.to_file(file_path)
# wordcloud表示
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()
if __name__ == '__main__':
# 青空文庫からテキストの取得
url = "http://www.aozora.gr.jp/cards/000879/files/42_15228.html" # 芥川龍之介 『鼻』
r = requests.get(url, timeout=10)
soup = BeautifulSoup(r.content, "lxml")
# 本文の抽出
text_elm = soup.find("div", attrs={"class": "main_text"})
# ルビの削除
[e.extract() for e in text_elm.select("rt")]
text = text_elm.text
# wordcloudの作成
file_path = r"D:\nose.png" # 出力する画像ファイルのパス
get_wordcloud(text, file_path)
0 件のコメント:
コメントを投稿