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