

Wordcloud でテキストマイニングをしているのですが、プログラムを実行するとOSError: cannot open resourceとなります。

**コード:**

[code]

    word = " 選挙 期間 中 自民党 候補 者 たち 全国 各地 我々 経済 政策 安全 保障 日本 将来 決意 地域 想い 皆様 国 自民党 皆様 歩み １ ２ 日間 声援 外国 人 旅行 者 数 ５ 年間 ３ 倍 自民党 次元 観光 資源 施策 取り組み 我が国 伝統 文化財 等 国内 観光 資源 強化 観光 産業 活性 化 実現 明日 １０月 ２ １ 日 ( 土 ) 安倍 晋 三 総裁 岐阜 県 愛知 県 東京 都 詳細 是非 自民党 特設 サイト 確認 我々 スタート 給付 型 奨学 金 授業 料 免除 制度 拡充 支援 必要 子供 たち 高等 教育 無償 化 自民党 誰 事 安心 社会 明日 １０月 ２ ０ 日 ( 金 ) 安倍 晋 三 総裁 神奈川 県 東京 都 詳細 是非 自民党 特設 サイト 確認 明日 １０月 １ ９ 日 ( 木 ) 安倍 晋 三 総裁 奈良 県 京都 府 滋賀 県 詳細 是非 自民党 特設 サイト 確認 ３ 年間 ４ ０ 代 以下 農業 就農 者 ３ 年 連続 ２ 万 人 自民党 若者 意欲 農林 漁業 者 全力 応援 挑戦 夢 希望 農政 時代 私 たち 自民党 日本 経済 中小 企業 応援 思い 中小 小規模 事業 者 固定 資産 税 ３ 年間 半減 制度 始め ３ 万 件 利用 制度 実現 中小 企業 倒産 3 割 減少 生産 性 ため 支援 大胆 明日 １０月 １ ８ 日 ( 水 ) 安倍 晋 三 総裁 埼玉 県 東京 都 詳細 是非 自民党 特設 サイト 確認 選挙 北朝鮮 脅威 国民 生命 幸せ 暮らし の 選挙 自民党 今 外交 力 国際 社会 連携 姿勢 北朝鮮 問題 明日 １０月 １ 6 日 ( 月 ) 安倍 晋 三 総裁 大阪 府 詳細 是非 自民党 特設 サイト 確認 アベノミクス ３ 本 矢 はじめ 我々 政策 政権 交替 後 gdp ５ ０ 兆 円 都道府県 有効 求人 倍率 １ 倍 景気 回復 着実 日本 経済 成長 皆様 一人ひとり 成長 実感 よう 努力 所存 明日 １０月 １ ５ 日 ( 日 ) 安倍 晋 三 総裁 北海道 詳細 是非 自民党 特設 サイト 確認 # 自民党 # 安倍 晋 三 # 街頭 演説 熊本 地震 一 年 半 被害 不自由 生活 多く 被災 者 皆様 安心 元 生活 よう 全力 復興 # 国 # 衆院 "
    
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    
    wordcloud = WordCloud(background_color="white", font_path='ipag.ttc', width=600, height=400, min_font_size=10)
    wordcloud.generate(word)
    plt.imshow(wordcloud)
    plt.show()
    
[/code]

**エラーメッセージ:**

[code]

    OSError                                   Traceback (most recent call last)
    <ipython-input-20-ae615ff8e919> in <module>
          4 #fpath = "/Library/Fonts//ヒラギノ丸ゴ ProN W4.ttc"
          5 wordcloud = WordCloud(background_color="white", font_path='ipag.ttc', width=600, height=400, min_font_size=10)
    ----> 6 wordcloud.generate(word)
          7 plt.imshow(wordcloud)
          8 plt.show()
    
    ...... 中略......
    
    ~\anaconda3\lib\site-packages\PIL\ImageFont.py in __init__(self, font, size, index, encoding, layout_engine)
        186                     return
        187             self.font = core.getfont(
    --> 188                 font, size, index, encoding, layout_engine=layout_engine
        189             )
        190         else:
    
    OSError: cannot open resource
    
[/code]

以下のコマンドで日本語フォントを見つけ再度実行。

[code]

    $ find /Library/Fonts/
    /Library/Fonts//ヒラギノ丸ゴ ProN W4.ttc
    
    fpath = "/Library/Fonts//ヒラギノ丸ゴ ProN W4.ttc"
    wordcloud = WordCloud(background_color="white", font_path='ipag.ttc', width=600, height=400, min_font_size=10)
    wordcloud.generate(word)
    plt.imshow(wordcloud)
    plt.show()
    
[/code]

やはりOSError: cannot open resource エラー発生。  
エラーの原因は何でしょうか？

kernelの再起動とAnaconda Navigatorの再起動は行いました。

回答をいただいて、下記コード試しました。

[code]

    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    
    wordcloud = WordCloud(background_color="white", font_path = '/Library/Fonts//ヒラギノ丸ゴ ProN W4.ttc', width=600, height=400, min_font_size=10)
    wordcloud.generate(word)
    plt.imshow(wordcloud)
    plt.show()
    
[/code]

今度は下記のエラーが出ます。

[code]

    FileNotFoundError: [Errno 2] No such file or directory: '/Library/Fonts//ヒラギノ丸ゴ ProN W4.ttc'
    
[/code]

フォントはあるのに見つからないということなんでしょうか？


CC BY-SA 4.0
2022-03-12T06:29:49.357
86807
2022-03-13T08:41:14.760
2022-03-12T12:20:06.230
48948
48948
question
python
Python でのwordcloud を実行すると、OSError: cannot open resourceとなる。


元のコードでは単に `font_path='ipag.ttc'` ファイル名だけを指定しているため、実行した Python のコードと同じフォルダ
(ディレクトリ) 内にフォントファイルを探しに行くことになります。

修正後のコードも `fpath` を定義するだけで使われていません。

* * *

例えば以下のように、フォントファイルを **絶対パス** で指定してみてください。

[code]

    wordcloud = WordCloud(background_color="white", font_path='/Library/Fonts//ヒラギノ丸ゴ ProN W4.ttc', width=600, height=400, min_font_size=10)
    
[/code]


CC BY-SA 4.0
2022-03-12T06:47:34.160
86809
2022-03-12T06:47:34.160
3060
86807
answer


本当にファイルがそこにあるのか確認してみてはどうでしょうか？

例えば

[code]

    from pathlib import Path
    
    p = Path('/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc')
    p.exists()   # True
    
[/code]

探す場合は

[code]

    >>> from pathlib import Path
    >>> base = Path('/usr/share/fonts')
    >>> for p in base.glob('**/Noto*.ttc'):
    ...   print(p)
    ... 
    /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc
    /usr/share/fonts/opentype/noto/NotoSansCJK-Light.ttc
    /usr/share/fonts/opentype/noto/NotoSerifCJK-Black.ttc
    
    
[/code]

* * *

#### 追記

`findSystemFonts()` でパスを得て, 一覧表示する部分と, 実際に表示する部分の例 (colabで動作確認)

[code]

    #!apt install fonts-noto-cjk
    word = " 選挙 期間 中 自民党 候補 者 たち 全国 各地 我々 経済 政策 安全 保障 日本 将来 決意 地域 想い 皆様 国 自民党 皆様 歩み １ ２ 日間 声援 外国 人 旅行 者 数 ５ 年間 ３ 倍 自民党 次元 観光 資源 施策 取り組み 我が国 伝統 文化財 等 国内 観光 資源 強化 観光 産業 活性 化 実現 明日 １０月 ２ １ 日 ( 土 ) 安倍 晋 三 総裁 岐阜 県 愛知 県 東京 都 詳細 是非 自民党 特設 サイト 確認 我々 スタート 給付 型 奨学 金 授業 料 免除 制度 拡充 支援 必要 子供 たち 高等 教育 無償 化 自民党 誰 事 安心 社会 明日 １０月 ２ ０ 日 ( 金 ) 安倍 晋 三 総裁 神奈川 県 東京 都 詳細 是非 自民党 特設 サイト 確認 明日 １０月 １ ９ 日 ( 木 ) 安倍 晋 三 総裁 奈良 県 京都 府 滋賀 県 詳細 是非 自民党 特設 サイト 確認 ３ 年間 ４ ０ 代 以下 農業 就農 者 ３ 年 連続 ２ 万 人 自民党 若者 意欲 農林 漁業 者 全力 応援 挑戦 夢 希望 農政 時代 私 たち 自民党 日本 経済 中小 企業 応援 思い 中小 小規模 事業 者 固定 資産 税 ３ 年間 半減 制度 始め ３ 万 件 利用 制度 実現 中小 企業 倒産 3 割 減少 生産 性 ため 支援 大胆 明日 １０月 １ ８ 日 ( 水 ) 安倍 晋 三 総裁 埼玉 県 東京 都 詳細 是非 自民党 特設 サイト 確認 選挙 北朝鮮 脅威 国民 生命 幸せ 暮らし の 選挙 自民党 今 外交 力 国際 社会 連携 姿勢 北朝鮮 問題 明日 １０月 １ 6 日 ( 月 ) 安倍 晋 三 総裁 大阪 府 詳細 是非 自民党 特設 サイト 確認 アベノミクス ３ 本 矢 はじめ 我々 政策 政権 交替 後 gdp ５ ０ 兆 円 都道府県 有効 求人 倍率 １ 倍 景気 回復 着実 日本 経済 成長 皆様 一人ひとり 成長 実感 よう 努力 所存 明日 １０月 １ ５ 日 ( 日 ) 安倍 晋 三 総裁 北海道 詳細 是非 自民党 特設 サイト 確認 # 自民党 # 安倍 晋 三 # 街頭 演説 熊本 地震 一 年 半 被害 不自由 生活 多く 被災 者 皆様 安心 元 生活 よう 全力 復興 # 国 # 衆院 "
    
    import matplotlib.font_manager as fm
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    
    import pandas as pd
    df = pd.DataFrame([(fm.FontProperties(fname=f).get_name(), f) for f in fm.findSystemFonts()],
            columns=['name', 'path'])
    display(df)
    
    fontpath = df.iloc[8]['path']   # 行指定で 'Noto Sans CJK JP' のパスを得る
    
    wordcloud = WordCloud(background_color="white", font_path=fontpath, width=600, height=400, min_font_size=10)
    wordcloud.generate(word)
    wordcloud.to_image()
    
[/code]

[![フォントの一覧と結果](https://i.stack.imgur.com/CltuT.png)](https://i.stack.imgur.com/CltuT.png)


CC BY-SA 4.0
2022-03-12T13:44:03.017
86811
2022-03-13T08:41:14.760
2022-03-13T08:41:14.760
43025
43025
86807
answer