0.5から始める機械学習

Machine Learning, Deep Learning, Computer Vision に関する備忘録

arXiv APIの使い方 ~ArXiv Bookmark開発記その3~

こんにちは

ArXiv Bookmark開発記第三弾は、arXivから論文情報を検索できる「arXiv API」についてです!

arXiv API | arXiv e-print repository

arXivでは論文検索用のAPIを提供してくれているため今回はこれを利用します。

詳しいマニュアルはこちらから

arxiv.org

arXiv API

この公式マニュアルで紹介されているように Python + feedparserを使ってarXiv APIをサクッと叩いていきます!!

まずはfeedparserをインストール.

pip install feedparser

import feedparser

base_url = "https://export.arxiv.org/api/query?search_query="

# クエリを指定
query = ""

# 検索件数
max_results = 10

# 結果を新しいものから順にソートする
sort_results = "&sortBy=lastUpdatedDate&sortOrder=descending&max_results={max_results}".format(max_results=max_results)

d = feedparser.parse(base_url + query + sort_results)

# entriesに検索結果が格納されている
for entry in d.entries:
    # ここから先の処理は後述

こんな感じでクエリで指定した条件で検索をかけることができます。

クエリには例えばカテゴリーで検索したい場合は、公式マニュアル の"5.3. Subject Classifications" からカテゴリーを選択し、下記のように指定することができます。

# cs.CVの場合
query = "cat:cs.CV"

クエリの細かい指定方法はマニュアルを確認してください。

論文情報の取得

feedparserを使って簡単にAPIを叩くことができたので、ここからは論文タイトルやサマリーなどより詳細な情報を取得するための方法についてです!

取得できる情報は公式マニュアル の"5.2. Details of Atom Results Returned"に書かれています。

では実際のコードで見ていきましょう!!

import datetime

for entry in feed.entries:
    # id
    # 例: 'http://arxiv.org/abs/1909.07581v2' ← ID + v2 みたいに"vn"としてバージョン情報がついているので"v"以前を取り出す
    arxiv_id = os.path.basename(entry.id).split("v")[0]

    # タイトル
    title = entry.title

    # リンクURL
    link = entry.link

    # サマリー. 改行を削除
    summary = entry.summary.replace("\n", "")

    # 第一版提出日時
    # time.struct_time 形式で保存されているのでdatetime形式に変更(https://cortyuming.hateblo.jp/entry/20100919/p1)
    published = datetime(*entry.published_parsed[:6])

    # 更新日時
    updated = datetime(*entry.updated_parsed[:6])

    # バージョン
    version = int(link[-1])

    # 著者
    authors = dict(authors=[author["name"] for author in entry.authors])

    # カテゴリー
    categories = dict(categories=[tags["term"] for tags in entry.tags])

    # コメント
    # コメントがない場合もあるので、try~exceptで処理
    try:
        comment = entry.arxiv_comment
    except AttributeError:
        comment = None

こんな感じで必要な情報は取り出せるはずです!!

まとめ

Python + feedparser があれば簡単に arXiv APIから論文検索をかけることができます。

これで論文情報を取得して必要に応じて表示する感じでサイトを作っていこうかと思います。

続き

nodaki.hatenablog.com