home about terms twitter

(Python)Arxivの論文情報からWordCloudを作成する

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

前書き

論文はプレプリントで公開されることで、最新の研究内容を参照することができます。 プレプリントは出版社への出版や査読がされる前に、研究の独自性を示すために公開されることが多いです。そのため、のちに細かい内容が変更されることがあります。 一方で、速報性を重視して提出が頻繁になされます。

arxivは論文のプレプリントサーバーであり、数学、物理学、統計学などの幅広い研究分野について論文が保存および公開されます。

以下の動機が得られました。

  • プレプリントサーバーから論文情報を得たい。
  • 得られた論文の概要を得たい。
  • キーワードを抽出してトレンドを得たい。

関連記事

方法

実行環境

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/17 Python 3.7.10

まずは以下のコードでGoogleドライブのマウントを行います。

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

Mounted at /gdriveとなり、Googleドライブがマウントされます。

import urllib.request, csv
import xml.etree.ElementTree as ET

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 = 'http://export.arxiv.org/api/query?search_query=all:'+keyword+'&start=0&max_results='+str(size)
    req = urllib.request.Request(url)
    with urllib.request.urlopen(req) as res:
        xmlres = res.read()
            
    root = ET.fromstring(xmlres)

    size_int = int(size)
    for i in range(size_int):
        try:
            title = root[7+i][3].text
            link = root[7+i][0].text
            abst = root[7+i][4].text
            writer.writerow({'Title':title, 'Link':link, 'Abstract':abst})
        except (KeyError, IndexError, UnicodeEncodeError) as e:
            print(e)
            pass
  • element indices must be integersと言われた時には、インデックスを整数にします。
  • child index out of rangeと表示された時には、正しい子要素を指定します。
  • .textを入れないとElementのみが得られます。その中身としてのTitle, Link, Summaryなどを得たい場合には.textをつけます。

これにより得られるCSVファイルは以下の通りです。

Title Link Abstract
論文タイトル 本文へのリンク 概要(Summary)

output.csvが得られますので、これを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

  • コンピュータ機器としてのマウスについての論文が取得されている。
  • 生物学関連の内容は少ない。

関連項目