You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于pybliometrics.ScopusSearch的SUBJAREA过滤有效性与字段获取问询

问题解决:pybliometrics中SUBJAREA筛选失效及获取学科领域字段

一、SUBJAREA筛选失效的原因与解决办法

网页端和pybliometrics返回结果数量差异的核心原因是Scopus API不支持在查询语句中直接使用LIMIT-TO语法——网页端会自动解析该语法,但API要求将筛选条件通过单独的filter参数传递,而非嵌入query字符串。

修改代码,将LIMIT-TO的筛选条件拆分到filter参数中,核心查询逻辑保留在scopus_query里:

from pybliometrics.scopus import ScopusSearch
import pandas as pd

min_year = 1995
max_year = 1999

# 核心查询:仅保留关键词和年份范围
scopus_query = f'TITLE-ABS-KEY (maintenance) AND PUBYEAR > {min_year-1} AND PUBYEAR < {max_year+1}'

# 筛选条件通过filter参数传递,多条件用逗号分隔
filters = 'SUBJAREA(ENGI), DOCTYPE(ar), SRCTYPE(j), LANGUAGE(English)'

# 初始化ScopusSearch时传入filter参数
s = ScopusSearch(scopus_query, filter=filters, verbose=True, download=True)

df = pd.DataFrame(s.results)

to_drop = ['eid', 'doi', 'pii', 'pubmed_id', 'subtype', 'creator', 'afid', 
           'affiliation_city', 'author_count', 'author_ids', 'author_afids',
           'coverDisplayDate', 'issn', 'source_id', 'eIssn','volume', 
           'issueIdentifier', 'article_number', 'pageRange', 'freetoread', 
           'freetoreadLabel', 'fund_acr', 'fund_no', 'fund_sponsor']

df = df.drop(columns=to_drop)
df.to_excel(f"Maintenance_{min_year}_{max_year}.xlsx", index=False)

修改后筛选条件会被API正确解析,返回结果数量将与网页端一致。

二、获取Subject Area字段的方法

默认情况下pybliometrics返回的结果不包含学科领域信息,需通过指定view参数获取完整元数据:

  1. 初始化ScopusSearch时添加view="COMPLETE"参数,该视图会返回包括学科领域在内的完整字段
  2. 修改后的初始化代码:
s = ScopusSearch(scopus_query, filter=filters, view="COMPLETE", verbose=True, download=True)
  1. 生成的DataFrame会新增subject_area字段,该字段为列表格式,包含文献所属的所有学科领域代码及名称(例如['ENGI', 'Engineering'])

注:使用COMPLETE视图会增加API请求的数据量,可能延长下载时间,但能获取所需的学科领域信息。

内容的提问来源于stack exchange,提问作者sroverto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:47:06