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

OpenAlex API查询庆应、早稻田大学符合条件成果无匹配的问题排查

问题排查:OpenAlex API查询遗漏庆应义塾大学、早稻田大学数据

我需要统计1980年至今,概念层级为0且引用次数>5的学术成果数量。已筛选出层级为0的concept_ids并存储,将API查询结果保存至CSV后,发现**庆应义塾大学(Keio University)和早稻田大学(Waseda University)**无匹配记录,但手动验证确认两校存在符合要求的论文,现排查以下代码问题:

import requests
import json
import pandas as pd


year_range = range(1980, 2024)
year_list = list(year_range)
concepts_ids = {'C127313418', 'C17744445', 'C121332964', 'C41008148', 'C144024400', 'C33923547', 'C138885662', 'C185592680', 'C15744967', 'C127413603', 'C142362112', 'C95457728', 'C205649164', 'C39432304', 'C144133560', 'C162324750', 'C71924100', 'C192562407', 'C86803240'}

# Lists to store data
concept_id_list = []
year_list_result = []
institution_list = []
count_list = []
institution_name = []
for concept_id in concepts_ids:
    for year in year_list:

        api_url = f'https://api.openalex.org/works?filter=publication_year:{year},cited_by_count:%3E5,concepts.id:{concept_id}&group_by=authorships.institutions.lineage'


        response = requests.get(api_url)


        json_data = response.json()

        # Extract relevant information
        for entry in json_data.get('group_by', []):
            concept_id_list.append(concept_id)
            year_list_result.append(year)
            institution_list.append(entry.get('key'))
            count_list.append(entry.get('count'))
            institution_name.append(entry.get('key_display_name'))

# Create a DataFrame
result_df1 = pd.DataFrame({
    'concept_id': concept_id_list,
    'year': year_list_result,
    'institution': institution_list,
    'count': count_list,
    'institution_name' : institution_name})

# Display the DataFrame
print(result_df1)

问题根源分析

  • 分组字段错误:代码中使用group_by=authorships.institutions.lineage,lineage返回的是机构的层级ID链(包含上级/附属机构),而非学校自身ID。庆应义塾、早稻田大学的论文可能关联下属院系ID,导致数据被归到了层级路径的其他节点,而非学校本身。
  • 潜在分页遗漏:OpenAlex分组查询默认仅返回前200条结果,若符合条件的机构数量超过阈值,会直接丢失后续数据。

修复方案

1. 修改分组字段为机构自身ID

将group_by参数改为authorships.institutions.id,直接按学校自身ID统计:

api_url = f'https://api.openalex.org/works?filter=publication_year:{year},cited_by_count:>5,concepts.id:{concept_id}&group_by=authorships.institutions.id'

(注:%3E是>的URL编码,直接写>5即可,requests会自动处理编码)

2. 补充分页逻辑避免数据遗漏

添加分页遍历,确保获取所有符合条件的机构数据:

for concept_id in concepts_ids:
    for year in year_list:
        page = 1
        while True:
            api_url = f'https://api.openalex.org/works?filter=publication_year:{year},cited_by_count:>5,concepts.id:{concept_id}&group_by=authorships.institutions.id&page={page}&per_page=200'
            response = requests.get(api_url)
            json_data = response.json()
            group_entries = json_data.get('group_by', [])
            if not group_entries:
                break
            # 原数据提取逻辑不变
            for entry in group_entries:
                concept_id_list.append(concept_id)
                year_list_result.append(year)
                institution_list.append(entry.get('key'))
                count_list.append(entry.get('count'))
                institution_name.append(entry.get('key_display_name'))
            page += 1

3. 可选:精准锁定目标院校

若需直接过滤出庆应义塾和早稻田大学,可在过滤条件中添加机构名称:

api_url = f'https://api.openalex.org/works?filter=publication_year:{year},cited_by_count:>5,concepts.id:{concept_id},authorships.institutions.name:Keio University|Waseda University&group_by=authorships.institutions.id&page={page}&per_page=200'

额外验证建议

  • 手动查询OpenAlex中目标学校的论文,确认其authorships.institutions.id和lineage字段值,对比分组结果是否匹配;
  • 核对指定的concept_ids是否确实存在于目标论文的concepts.id列表中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:57:05