質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1444閲覧

WordCloudを用いて画像を作成したいのですが、ValueErrorで行き詰まってしまいました。

tana_sh

総合スコア1

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/05 22:20

前提・実現したいこと

https://qiita.com/uminchu987/items/07baa1a354cf96d2564bを参考に、青空文庫から「走れメロス」のテキストをスクレイピングして、Worldcloud画像を作成したいです。
ライブラリはスクレイピング用にurllib.requestとBeautifulSoup、形態素解析にMeCab、画像作成にWordCloudを使用しました。

発生している問題・エラーメッセージ

ValueError: Couldn't find space to draw. Either the Canvas size is too small or too much of the image is masked out.

該当のソースコード

Python

1import urllib.request 2from bs4 import BeautifulSoup 3import MeCab 4from wordcloud import WordCloud 5 6def scraping(url): 7 text = '' 8 html = urllib.request.urlopen(url) 9 soup = BeautifulSoup(html, 'html.parser') 10 11 meros = soup.findAll('div', class_ = 'main_text') 12 13 for i in meros: 14 text += i.text 15 16 return text 17 18 19def analysis(words): 20 mecab = MeCab.Tagger('-Ochasen') 21 mecab.parse('') 22 node = mecab.parseToNode(words) 23 text = [] 24 25 while node: 26 # 単語部分 27 word = node.surface 28 # 品詞部分 29 hinsi = node.feature.split(',')[0] 30 31 if hinsi in ['動詞',"副詞","形容詞","名詞"]: 32 text.append(word) 33 34 node = node.next 35 36 if node is None: 37 break 38 39 return text 40 41def make_img(word): 42 text = ''.join(word) 43 #日本語フォントのパス 44 fpath = 'C/Windows/Fonts/YuGothM.ttc' 45 cloud_img = WordCloud(background_color='white', font_path=fpath, width=800, height=600).generate(text) 46 47 #pngで保存 48 cloud_img.to_file('./wordcloud.png') 49 50 51if __name__ == '__main__': 52 #走れメロス 53 url = "https://www.aozora.gr.jp/cards/000035/files/1567_14913.html" 54 text = scraping(url) 55 node = analysis(text) 56 make_img(node)

試したこと

WordCloudの引数、width, height, max_wordsの値を大きくしたのですが、同じエラーメッセージが表示されました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「Couldn't find space to draw. Either the Canvas size is too small or too much of the image is masked out.」([直訳]描画するスペースが見つけられません。キャンバスサイズが小さすぎるか、隠されるイメージが多すぎです)というエラーなのですから、まずスクレイピングしてきたデータの量を確認してください。

質問に「max_wordsの値を大きくしたのですが」と書かれていますが、質問のプログラムにはmax_wordsという文字列が含まれていません。
文字数を大幅に削減すると表示されるようになると思われます。

"https://www.aozora.gr.jp/cards/000035/files/1567_14913.html"には1万を超える文字が含まれています。
キャンパスのサイズは800x600で、32x32の大きさ(小アイコンぐらい)の文字で詰めると25x18文字(450文字)ぐらいしか入りません。
エラーメッセージの指摘が、妥当だと思います。

投稿2020/05/06 02:05

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tana_sh

2020/05/06 03:37

回答ありがとうございます。 文字列を小さくして、キャンパスのサイズを調節することで解決致しました! 回答が速く、とても助かりました。ありがとうございました!
guest

0

追記:make_img関数内のtext = ''.join(word)において結合時にスペースが挿入されておらず、意図する画像が生成されませんでしたので報告させていただきます。

※正しくはtext = ' '.join(word)です。

投稿2020/05/06 05:33

tana_sh

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問