前提・実現したいこと
4月からPythonを初めて利用、他の方が起動するpyファイルで
pyファイルを起動してテキストマイニングを表示したいが、エラーで上手くいかない
発生している問題・エラーメッセージ
"Matplotlib created a temporary config/cache directory at C:\Users\YASUDA~1\AppData\Local\Temp\matplotlib-wi5hks0s because the default path (W:.matplotlib) is not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing.
C:\Python
import
テキスト取り込み&解析中・・・
テキスト関連OK!
Traceback (most recent call last):
File ""C:\Python\11f_wordcloud.py"", line 175, in <module>
wc.generate(text) #「text」短文、「linetext」単語
File ""C:\Users\個人名\AppData\Local\Programs\Python\Python37\lib\site-packages\wordcloud\wordcloud.py"", line 632, in generate
return self.generate_from_text(text)
File ""C:\Users\個人名\AppData\Local\Programs\Python\Python37\lib\site-packages\wordcloud\wordcloud.py"", line 614, in generate_from_text
self.generate_from_frequencies(words)
File ""C:\Users\個人名\AppData\Local\Programs\Python\Python37\lib\site-packages\wordcloud\wordcloud.py"", line 496, in generate_from_frequencies
font = ImageFont.truetype(self.font_path, font_size)
File ""C:\Users\個人名\AppData\Roaming\Python\Python37\site-packages\PIL\ImageFont.py"", line 853, in truetype
return freetype(font)
File ""C:\Users\個人名\AppData\Roaming\Python\Python37\site-packages\PIL\ImageFont.py"", line 850, in freetype
return FreeTypeFont(font, size, index, encoding, layout_engine)
File ""C:\Users\個人名\AppData\Roaming\Python\Python37\site-packages\PIL\ImageFont.py"", line 210, in init
font, size, index, encoding, layout_engine=layout_engine
OSError: cannot open resource
"
該当のソースコード
!/usr/bin/env python
import os,matplotlib,re,MeCab,itertools,pydotplus,requests,io,string
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
coding: utf-8
!/usr/bin/env python
from wordcloud import WordCloud
from PIL import Image
import numpy as np
from collections import Counter
import MeCab as amee
from igraph import *
from bs4 import BeautifulSoup
import pandas as pd
from os import path
from collections import Counter
「.txtファイル」からテキストを抽出するための関数
def get_text(path):
f = open(path, encoding="utf-8")
text = f.read()
f.close()
return text
形態素解析開始
class Wakati:
コンストラクタ
def init(self, text):
self.text = text
self.tokens = None
self.targets = ["名詞", "動詞", "形容詞"]
除外したいNGワードリスト〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
self.stopwords = [u'てる']
分かち書きを行うメソッド
def tokenize(self):
words = self.get_words()
self.tokens = self.get_stopped_words(words)
return self.tokens
形態素解析の結果をDataFrameで返す関数
def get_dfw(self):
t = MeCab.Tagger("Owakati")
t.parse("")
node = t.parseToNode(self.text)
surfaces = []
stems = []
poss = []
while node:
surface = node.surface
feature = node.feature.split(",")
stem = feature[6]
pos = feature[0]
surfaces.append(surface)
stems.append(stem)
poss.append(pos)
node = node.next
dfw = pd.DataFrame()
dfw["SURFACE"] = surfaces[1:-1]
dfw["STEM"] = stems[1:-1]
dfw["POS"] = poss[1:-1]
return dfw
形態素解析結果から目的となる品詞に一致した単語リストを取得する関数
def get_words(self):
dfw = self.get_dfw()
words = []
for row in dfw.iterrows():
for target_pos in self.targets:
if row[1]["POS"] == target_pos:
if row[1]["STEM"] != "*":
words.append(row[1]["STEM"])
return words
単語リストからストップワードを除去した単語リストを返す関数
def get_stopped_words(self, words):
stopped_words = [word for word in words if word not in self.stopwords]
return stopped_words
トークンリストを半角スペースで結合したテキストに変換する関数
def tokens2linetext(tokens):
linetext = ""
for token in tokens:
linetext += token
linetext += " "
return linetext[:-1]
テキストデータの取り込み〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
path = u"C:/python/00__text/指定のテキスト.txt"
text = get_text(path)
テキストの形態素解析
tokens = Wakati(text).tokenize()
形態素解析結果を半角スペースで結合されたテキストに変換
linetext = tokens2linetext(tokens)
フォントパスの準備
fontpath = "C:/python/08__font/AozoraMinchoHeavy.ttf"
WordCloudの外形画像の準備〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
mask_path = "C:/python/01__image/指定の枠.png"
datum_mask = np.array(Image.open(mask_path))
除外したいNGワードリスト〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
stopwords = [u'てる']
パラメータ
wc = WordCloud(
background_color="white",
colormap="Reds",
mask=datum_mask,
font_path=fontpath,
collocations=False,
stopwords=stopwords,
max_font_size=100,
min_font_size=30,
max_words=3,
ranks_only=False,
random_state=None,
prefer_horizontal=0.9,# 「縦書き」の比率
mode="RGBA",
scale=1,
height=600,
width=900
)
wc.generate(text) #「text」短文、「linetext」単語
出力ファイル名設定と単語頻度図の出力
filename = os.path.basename(path)
filename = os.path.splitext(filename)[0]
outname = "wordcloud_" + filename + "(フレーズ)" + ".png"
wc.to_file(outname)
出力!
print("出力準備完了!")
plt.figure(figsize=(15,9))
plt.imshow(wc)
plt.axis("off")
plt.show()
形態素解析の結果をShellに掲載
m = MeCab.Tagger("-Ochasen")
mecablist =[]
wlist =m.parse(text).splitlines()
for u in wlist:
xlist = []
for v in u.split():
xlist.append(v)
mecablist.append(xlist)
wordbodylist =[]
for u in mecablist:
wordbodylist.append(u[0])
cnt = Counter(wordbodylist)
print(sorted(cnt.items(), key=lambda x: x[1], reverse=True)[:400])
試したこと
mecab再インストール
辞書ipdic再インストール
matplotlib path設定(一度解消したが、再度同エラー発生)
補足情報(FW/ツールのバージョンなど)
windows10
matplotlib 3.4.1
Python3.7
回答1件
あなたの回答
tips
プレビュー