--- name: sn-search-academic description: "多源学术搜索:ArXiv、Semantic Scholar(含引用数)、PubMed、Wikipedia。支持按章节读取 ArXiv HTML 全文和 PMC 全文。触发词:学术论文、文献调研、引用数据、生物医学文献、百科查询。一站式多源工具。" --- # sn-search-academic - 学术搜索 搜索 ArXiv、Semantic Scholar、PubMed、Wikipedia 四个学术平台,并提供 ArXiv 和 PMC 的**全文章节阅读**能力。全部免费,部分脚本有可选 API key 可提升限额。 ## 依赖 运行脚本前先安装本 skill 的 Python 依赖: ```bash python3 -m pip install -r skills/sn-search-academic/requirements.txt ``` 如果项目使用 `uv` 环境: ```bash uv pip install -r skills/sn-search-academic/requirements.txt ``` `arxiv_paper.py` 需要 `beautifulsoup4` 解析 ArXiv HTML;其他脚本主要依赖 `httpx` 发起请求。 ## 可用脚本 | 脚本 | 平台 | 用途 | API key | |------|------|------|---------| | `arxiv_search.py` | ArXiv | 预印本搜索,支持作者/标题/ID查询 | 无需 | | `arxiv_paper.py` | ArXiv HTML | 按章节读取 ArXiv 论文全文 | 无需 | | `semantic_scholar_search.py` | Semantic Scholar | 全学科搜索,含引用数和 TLDR | 无需(有 key 限额更高) | | `semantic_scholar_refs.py` | Semantic Scholar | 引用追溯:查论文的参考文献(backward)或被引论文(forward) | 无需(有 key 限额更高) | | `pubmed_search.py` | PubMed | 生医文献搜索,含结构化摘要和 PMC ID | 无需(有 key 限额更高) | | `pmc_paper.py` | PMC | 按章节读取 PMC 开放获取论文全文 | 无需(有 key 限额更高) | | `wikipedia_search.py` | Wikipedia | 百科文章搜索,支持多语言 | 无需 | ## 参数说明 ### arxiv_search.py ```bash python3 scripts/arxiv_search.py [选项] ``` | 参数 | 说明 | 默认值 | |------|------|--------| | `query` | 搜索关键词(使用 `--id-list` 时可省略) | — | | `--limit`, `-n` | 返回结果数量 | 10 | | `--category`, `-c` | ArXiv 分类过滤(见下方"ArXiv 分类速查") | — | | `--sort` | 排序方式:`relevance`, `date`, `submitted` | relevance | | `--author`, `-a` | 按作者过滤,多个用逗号分隔 | — | | `--title-only` | 仅在标题中搜索 | — | | `--id-list` | 直接按 arXiv ID 获取元数据,逗号分隔 | — | ```bash python3 scripts/arxiv_search.py "transformer attention mechanism" --limit 5 python3 scripts/arxiv_search.py "diffusion model" --author "ho jonathan" --category cs.CV python3 scripts/arxiv_search.py --id-list "2409.05591,2301.07041" ``` **输出字段**:`title`, `url`, `snippet`(摘要), `arxiv_id`, `authors`, `published`, `updated`, `pdf_url`, `html_url`, `categories`, `primary_category`, `comment`, `journal_ref`, `doi` ### arxiv_paper.py 按章节读取 ArXiv 论文正文(需论文有 HTML 版本,2020 年后多数论文支持)。 ```bash python3 scripts/arxiv_paper.py [--section SECTION_NAME] ``` | 参数 | 说明 | |------|------| | `arxiv_id` | arXiv ID(如 `2409.05591` 或 `2409.05591v2`) | | `--section`, `-s` | 章节名(大小写不敏感,支持部分匹配)。不指定则列出所有章节。 | ```bash python3 scripts/arxiv_paper.py 2409.05591 # 列出章节 python3 scripts/arxiv_paper.py 2409.05591 --section introduction python3 scripts/arxiv_paper.py 2409.05591 --section method ``` **列出章节输出字段**:`arxiv_id`, `abs_url`, `html_url`, `pdf_url`, `section_count`, `sections[]`(name, level) **读取章节输出字段**:`arxiv_id`, `section`, `level`, `content`, `char_count` ### semantic_scholar_search.py ```bash python3 scripts/semantic_scholar_search.py [选项] ``` | 参数 | 说明 | 默认值 | |------|------|--------| | `query` | 搜索关键词(必填) | — | | `--limit`, `-n` | 返回结果数量 | 10 | | `--api-key` | Semantic Scholar API Key(也可通过 `S2_API_KEY` 环境变量) | — | ```bash python3 scripts/semantic_scholar_search.py "transformer architecture" --limit 5 python3 scripts/semantic_scholar_search.py "RLHF language model" --limit 10 ``` **输出字段**:`title`, `url`, `snippet`(摘要,缺失时降级为 tldr), `tldr`, `authors`, `year`, `venue`, `publication_date`, `citation_count`, `influential_citation_count`, `reference_count`, `is_open_access`, `open_access_pdf`, `fields_of_study`, `publication_types`, `doi`, `arxiv_id`, `paper_id` ### semantic_scholar_refs.py 引用追溯:给定一篇论文,查询它的参考文献(backward)或被引论文(forward)。 ```bash python3 scripts/semantic_scholar_refs.py [选项] ``` | 参数 | 说明 | 默认值 | |------|------|--------| | `paper_id` | 论文标识符:S2 ID、DOI(`10.xxxx/...`)、ArXiv ID(`2301.07041`)、PMID(`PMID:12345678`) | — | | `direction` | `references`=参考文献(backward),`citations`=被引论文(forward) | — | | `--limit`, `-n` | 返回结果数量 | 20 | | `--min-citations` | 最低引用数过滤 | 0 | | `--year-min` | 最早年份过滤 | — | | `--year-max` | 最晚年份过滤 | — | | `--api-key` | Semantic Scholar API Key(可选) | — | ```bash # 查看某篇论文引用了哪些论文(backward:找奠基工作) python3 scripts/semantic_scholar_refs.py 2301.07041 references --limit 10 # 查看某篇论文被谁引用(forward:找后续进展) python3 scripts/semantic_scholar_refs.py 2301.07041 citations --limit 10 --min-citations 50 # 用 DOI 查引用,限定 2023 年以后 python3 scripts/semantic_scholar_refs.py "10.1038/s41586-024-07487-w" citations --year-min 2023 # 找高引参考文献 python3 scripts/semantic_scholar_refs.py ARXIV:2005.14165 references --min-citations 100 --limit 5 ``` **输出字段**:`title`, `url`, `snippet`(摘要/tldr), `authors`, `year`, `venue`, `citation_count`, `influential_citation_count`, `is_open_access`, `open_access_pdf`, `doi`, `arxiv_id`, `paper_id`, `citation_contexts`(引用上下文句子,最多 3 条), `citation_intents`(引用意图) **输出额外字段**:`source_paper`(被查询论文的标题/年份/引用数), `total_available`(该方向总论文数), `returned`(过滤后返回数) ### pubmed_search.py 支持 PubMed 查询语法,如字段限定(`cancer[Title]`)、日期范围(`2024[pdat]`)。 ```bash python3 scripts/pubmed_search.py [选项] ``` | 参数 | 说明 | 默认值 | |------|------|--------| | `query` | 搜索关键词,支持 PubMed 查询语法 | — | | `--limit`, `-n` | 返回结果数量 | 10 | | `--api-key` | NCBI API Key(可选,限额从 3 req/s 升至 10 req/s) | — | ```bash python3 scripts/pubmed_search.py "CRISPR gene editing" --limit 5 python3 scripts/pubmed_search.py "Alzheimer[Title] AND treatment[Title]" --limit 5 ``` **输出字段**:`title`, `url`, `snippet`(结构化摘要), `authors`, `pmid`, `pmc_id`(有值则可传入 `pmc_paper.py`), `pmc_url`, `journal`, `pub_date`, `volume`, `issue`, `pages`, `keywords`, `pub_types`, `doi` ### pmc_paper.py 读取 PubMed Central 开放获取全文(约 700 万篇生医论文,占 PubMed 约 35%)。`pubmed_search.py` 结果中 `pmc_id` 为 `null` 的论文无法使用本工具。 ```bash python3 scripts/pmc_paper.py [--section SECTION_NAME] python3 scripts/pmc_paper.py --pmid [--section SECTION_NAME] ``` | 参数 | 说明 | |------|------| | `pmc_id` | PMC ID(如 `PMC11119143` 或 `11119143`) | | `--pmid` | PubMed ID,自动转换为 PMC ID(与 `pmc_id` 二选一) | | `--section`, `-s` | 章节名(大小写不敏感,支持部分匹配)。不指定则列出所有章节。 | | `--api-key` | NCBI API Key(可选) | ```bash python3 scripts/pmc_paper.py PMC11119143 # 列出章节 python3 scripts/pmc_paper.py PMC11119143 --section introduction python3 scripts/pmc_paper.py --pmid 38786024 --section conclusion ``` **列出章节输出字段**:`pmc_id`, `pmid`, `title`, `pmc_url`, `section_count`, `sections[]`(name, level,含子章节层级) **读取章节输出字段**:`pmc_id`, `section`, `level`, `content`(含子章节文本), `char_count` ### wikipedia_search.py ```bash python3 scripts/wikipedia_search.py [选项] ``` | 参数 | 说明 | 默认值 | |------|------|--------| | `query` | 搜索关键词(必填) | — | | `--limit`, `-n` | 返回结果数量 | 10 | | `--lang`, `-l` | 语言版本(`en`, `zh`, `ja`, `de`, `fr` 等) | en | ```bash python3 scripts/wikipedia_search.py "machine learning" --limit 5 python3 scripts/wikipedia_search.py "深度学习" --lang zh --limit 5 ``` ## 全文阅读工作流 搜索脚本返回摘要,阅读脚本返回正文。两者配合可按需精读,节省 token。 **ArXiv 论文**: 1. `arxiv_search.py` 搜索 → 获取 `arxiv_id` 2. `arxiv_paper.py ` 列章节 → `arxiv_paper.py --section introduction` 快速判断是否深入 3. 按需读取 `method` / `experiment` / `conclusion` **PMC 生医论文**: 1. `pubmed_search.py` 搜索 → 结果中取 `pmc_id`(非 null 才有全文) 2. `pmc_paper.py ` 列章节 → 按需读取关键章节 ## 引用追溯工作流 通过论文的引用关系发现关键词搜索覆盖不到的相关工作。 **Backward(找奠基工作)**: 1. 关键词搜索找到高相关论文 → 取其 `paper_id` 或 `arxiv_id` 2. `semantic_scholar_refs.py references --min-citations 50` → 找到高引参考文献 3. 筛选与研究问题相关的条目 → 用 `arxiv_paper.py` 或 `pmc_paper.py` 深入阅读 **Forward(找后续进展)**: 1. 找到领域奠基论文或关键论文 → 取其 ID 2. `semantic_scholar_refs.py citations --year-min 2024 --min-citations 10` → 找到近期高引跟进工作 3. 筛选与研究问题相关的条目 → 深入阅读 **Citation Chain(追溯演化路径)**: 1. 从种子论文 A 出发 → backward 找到 A 的关键参考文献 B 2. 从 B 出发 → forward 找到引用 B 的后续工作(可能发现 A 没引用的相关论文 C) 3. 形成 B → A → ... 和 B → C → ... 的知识脉络 ## ArXiv 分类速查 顶层领域可直接用(如 `--category cs`),子分类更精确(如 `--category cs.AI`)。 | 领域 | 分类代码 | 说明 | |------|---------|------| | **计算机科学** | `cs.AI` | 人工智能 | | | `cs.LG` | 机器学习 | | | `cs.CL` | 计算语言学 / NLP | | | `cs.CV` | 计算机视觉 | | | `cs.IR` | 信息检索 | | | `cs.RO` | 机器人 | | | `cs.SE` | 软件工程 | | | `cs.DC` | 分布式/并行计算 | | | `cs.NI` | 网络与互联网 | | | `cs.CR` | 密码学与安全 | | | `cs.DB` | 数据库 | | | `cs.HC` | 人机交互 | | **统计** | `stat.ML` | 统计机器学习 | | | `stat.AP` | 应用统计 | | | `stat.ME` | 统计方法论 | | **数学** | `math.OC` | 优化与控制 | | | `math.ST` | 统计理论 | | | `math.CO` | 组合数学 | | **物理** | `physics` | 物理(全类) | | | `cond-mat` | 凝聚态物理 | | | `quant-ph` | 量子物理 | | | `hep-th` | 高能理论物理 | | **经济/金融** | `econ.GN` | 经济学综合 | | | `q-fin.CP` | 计算金融 | | | `q-fin.ST` | 统计金融 | | **生物/医学** | `q-bio.NC` | 神经科学 | | | `q-bio.GN` | 基因组学 | | | `q-bio.QM` | 定量方法 | ## 输出格式 所有脚本输出标准 JSON: ```json { "success": true, "query": "...", "provider": "arxiv|semantic_scholar|pubmed|wikipedia", "items": [{"title": "...", "url": "...", "snippet": "...", ...}], "error": null } ``` `arxiv_paper.py` 和 `pmc_paper.py` 不走 `items` 格式,直接返回结构化对象(见各自"输出字段"说明)。