(Python)Arxivの論文情報からWordCloudを作成する
前書き
論文はプレプリントで公開されることで、最新の研究内容を参照することができます。 プレプリントは出版社への出版や査読がされる前に、研究の独自性を示すために公開されることが多いです。そのため、のちに細かい内容が変更されることがあります。 一方で、速報性を重視して提出が頻繁になされます。
arxivは論文のプレプリントサーバーであり、数学、物理学、統計学などの幅広い研究分野について論文が保存および公開されます。
以下の動機が得られました。
- プレプリントサーバーから論文情報を得たい。
- 得られた論文の概要を得たい。
- キーワードを抽出してトレンドを得たい。
関連記事
- DOAJ(オープンアクセス)からの情報を取得したい場合
- 応用例
方法
実行環境
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()
結果
- コンピュータ機器としてのマウスについての論文が取得されている。
- 生物学関連の内容は少ない。
関連項目