2021年10月25日月曜日

PythonとAPIで論文検索をする

Semantic Scholarという論文検索サービスがあり、検索結果のランキングにはAIが使われているらしい(Building a Better Search Engine for Semantic Scholar)。ちなみにこのサービスを運営しているのはAllen Institute for AIで、マイクロソフトの共同創業者だった故ポール・アレン氏が設立した研究機関。このサービスにはAPIがあるので、このAPIを利用してPythonで論文検索をしてみる。


環境


WSL2(Ubuntu20.04)。


Semantic ScholarのAPIについて

Semantic ScholarのLiterature Graph Service (1.0)を使って論文を検索する。このAPIのsearchエンドポイントではキーワードで論文を検索できる。レートリミットは5分間で100リクエストで、登録すればレートリミットを上げることができるらしい。ここでは登録せずに使う。「python」というキーワードで検索するには次のURLにアクセスする。

https://api.semanticscholar.org/graph/v1/paper/search?query=python

ブラウザでアクセスすると、以下のような結果が表示される。paperIdはSemantic Scholarで使われる論文ごとのID。


PythonとAPIで論文を検索する

デフォルトで取得できる論文情報は論文タイトルとAPIで論文詳細を取得するときなどに使える論文ID(paperId)だが、fieldsパラメータを使うと他の項目も取得できる。ここでは次の項目を取得する。

  • title:タイトル
  • year:年
  • referenceCount:参照数
  • citationCount:引用数
  • influentialCitationCount:影響力のある引用数? 機械学習で算出されたものらしい(What are Highly Influential Citations
  • isOpenAccess:オープンアクセスかどうか
  • fieldsOfStudy:研究分野
  • authors:著者

キーワード「python」で検索するPythonコードは以下の通り。最大取得件数を10に制限してある。

import requests
import json
 
endpoint = 'https://api.semanticscholar.org/graph/v1/paper/search'
keyword = 'python'
fields = ('title', 'year', 'referenceCount', 'citationCount',
	'influentialCitationCount', 'isOpenAccess', 'fieldsOfStudy', 'authors')
params = {
    'query': keyword,
    'fields': ','.join(fields),
    'limit': 10
}
r = requests.get(url=endpoint, params=params)

r_dict = json.loads(r.text)
total = r_dict['total']
print(f'Total search result: {total}')

data = r_dict['data']
for d in data:
    print('---------------')
    for fi in fields:
        if fi == 'authors':
            print(f'{fi}: {list(map(lambda a: a["name"], d[fi]))}')
        else:
            print(f'{fi}: {d[fi]}')

以下のように論文情報が取得できた。


0 件のコメント:

コメントを投稿