home about terms twitter

(Python)オープンアクセス論文の要旨からWordCloudを作成

date: 2021-05-16 | mod: 2021-05-17

WC

前:[(Python)オープンアクセス論文の要旨をAPIから取得する]

前書き

Pythonのurllibパッケージを使い、APIからのレスポンスをパースします。

オープンアクセス論文の情報としては、DOAJのAPIを介した検索を行います。DOAJのAPIの仕様につきましては公式のドキュメントをご覧ください。

前半部分は[(Python)オープンアクセス論文の要旨をAPIから取得する]と同様です。必要ならばご参照ください。

また、Arxivから取得したい場合には[(Python)Arxivの論文情報からWordCloudを作成する]もご参照ください。

方法

実行環境の確認

from datetime import datetime as dt
print("Environment")
print("Google Colaboratory Ver:" + str(dt.now().strftime("%Y/%m/%d")))
!python --version

Environment Google Colaboratory Ver:2021/05/16 Python 3.7.10

ドライブのマウント

from google.colab import drive
drive.mount('/gdrive')

出力されるURLからキーを取得して、空欄に入力後Enterを押してマウントします。

CSVファイルの取得

出力の結果は[(Python)オープンアクセス論文の要旨をAPIから取得する]をご参照ください。

今回は「mouse」についてページサイズ「5」として取得しています。

import urllib.request, json, csv

keyword = 'mouse'
size = 5

with open('/gdrive/My Drive/output.csv', 'w', encoding='UTF-8', newline='') as csv_file:
    writer = csv.writer(csv_file)
    
    fieldnames = ['Title', 'Link', 'Abstract']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()
    
    url = 'https://doaj.org/api/v2/search/articles/'+keyword+'?pageSize='+str(size)
    res = urllib.request.urlopen(url)
    res_json = json.loads(res.read().decode('utf8'))

    size_int = int(size)
    for i in range (size_int):
        try:
            title = res_json['results'][i]['bibjson']['title']
            link = res_json['results'][i]['bibjson']['link'][0]['url']
            abst = res_json['results'][i]['bibjson']['abstract']
            writer.writerow({'Title':title, 'Link':link, 'Abstract':abst})
        except (KeyError, IndexError, UnicodeEncodeError) as e:
            print(e)
            pass

WordCloudの取得

今回は白黒の画像を取得します。

import os
from os import path
from wordcloud import WordCloud
import matplotlib.pyplot as plt


text = open('/gdrive/My Drive/output.csv').read()


wordcloud = WordCloud().generate(text)

def color_func(word, font_size, position, orientation, random_state, font_path):
    return 'black'
wordcloud = WordCloud(
    max_font_size=None,
    color_func=color_func, 
    background_color="white",  
    width=800,
    height=600).generate(text)
plt.figure(figsize=(12,10))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

結果

WC

  • mouseよりも複数形のmiceが使われている。
  • cell(細胞)がよく使われている。

関連記事