# 元数据提取指南 从 DOI、PMID、arXiv ID 和 URL 中使用各种 API 及服务提取准确引用元数据的全面指南。 ## 概述 准确的元数据对于正确的引用至关重要。本指南涵盖: - 识别论文标识符(DOI、PMID、arXiv ID) - 查询元数据 API(CrossRef、PubMed、arXiv、DataCite) - 按条目类型划分的 BibTeX 必填字段 - 处理边缘情况和特殊情况 - 验证提取的元数据 ## 论文标识符 ### DOI(数字对象标识符) **格式**:`10.XXXX/suffix` **示例**: ``` 10.1038/s41586-021-03819-2 # Nature 文章 10.1126/science.aam9317 # Science 文章 10.1016/j.cell.2023.01.001 # Cell 文章 10.1371/journal.pone.0123456 # PLOS ONE 文章 ``` **属性**: - 永久标识符 - 元数据最可靠 - 解析到当前位置 - 出版商分配 **查找位置**: - 文章首页 - 文章网页 - CrossRef、Google Scholar、PubMed - 通常显眼地展示在出版商网站上 ### PMID(PubMed ID) **格式**:通常为 8 位数字 **示例**: ``` 34265844 28445112 35476778 ``` **属性**: - 特定于 PubMed 数据库 - 仅限于生物医学文献 - 由 NCBI 分配 - 永久标识符 **查找位置**: - PubMed 搜索结果 - PubMed 上的文章页面 - 通常在文章 PDF 页脚 - PMC(PubMed Central)页面 ### PMCID(PubMed Central ID) **格式**:PMC 后跟数字 **示例**: ``` PMC8287551 PMC7456789 ``` **属性**: - PMC 中的免费全文文章 - PubMed 文章的子集 - 开放获取或作者手稿 ### arXiv ID **格式**:YYMM.NNNNN 或 archive/YYMMNNN **示例**: ``` 2103.14030 # 新格式(2007 年起) 2401.12345 # 2024 年投稿 arXiv:hep-th/9901001 # 旧格式 ``` **属性**: - 预印本(未经同行评审) - 物理、数学、计算机科学、定量生物学等 - 版本追踪(v1、v2 等) - 免费开放获取 **查找位置**: - arXiv.org - 通常在发表前被引用 - 论文 PDF 页眉 ### 其他标识符 **ISBN**(书籍): ``` 978-0-12-345678-9 0-123-45678-9 ``` **arXiv 分类**: ``` cs.LG # 计算机科学 - 机器学习 q-bio.QM # 定量生物学 - 定量方法 math.ST # 数学 - 统计学 ``` ## 元数据 API ### CrossRef API **DOI 的主要来源**——最全面的期刊文章元数据。 **基础 URL**:`https://api.crossref.org/works/` **无需 API 密钥**,但建议使用礼貌池: - 在 User-Agent 中添加邮箱 - 获得更好的服务 - 无速率限制 #### 基本 DOI 查找 **请求**: ``` GET https://api.crossref.org/works/10.1038/s41586-021-03819-2 ``` **响应**(简化): ```json { "message": { "DOI": "10.1038/s41586-021-03819-2", "title": ["文章标题在此"], "author": [ {"given": "John", "family": "Smith"}, {"given": "Jane", "family": "Doe"} ], "container-title": ["Nature"], "volume": "595", "issue": "7865", "page": "123-128", "published-print": {"date-parts": [[2021, 7, 1]]}, "publisher": "Springer Nature", "type": "journal-article", "ISSN": ["0028-0836"] } } ``` #### 可用字段 **始终存在**: - `DOI`:数字对象标识符 - `title`:文章标题(数组) - `type`:内容类型(journal-article、book-chapter 等) **通常存在**: - `author`:作者对象数组 - `container-title`:期刊/书名 - `published-print` 或 `published-online`:出版日期 - `volume`、`issue`、`page`:出版详情 - `publisher`:出版商名称 **有时存在**: - `abstract`:文章摘要 - `subject`:学科分类 - `ISSN`:期刊 ISSN - `ISBN`:图书 ISBN - `reference`:参考文献列表 - `is-referenced-by-count`:引用次数 #### 内容类型 CrossRef `type` 字段的值: - `journal-article`:期刊文章 - `book-chapter`:图书章节 - `book`:图书 - `proceedings-article`:会议论文 - `posted-content`:预印本 - `dataset`:研究数据集 - `report`:技术报告 - `dissertation`:学位论文 ### PubMed E-utilities API **专门针对生物医学文献**——带 MeSH 术语的精选元数据。 **基础 URL**:`https://eutils.ncbi.nlm.nih.gov/entrez/eutils/` **建议使用 API 密钥**(免费): - 更高的速率限制 - 更好的性能 #### PMID 转元数据 **第 1 步:EFetch 获取完整记录** ``` GET https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi? db=pubmed& id=34265844& retmode=xml& api_key=YOUR_KEY ``` **响应**:包含全面元数据的 XML **第 2 步:解析 XML** 关键字段: ```xml 34265844
此处为标题 SmithJohn Nature 595 7865 2021 123-128 此处为摘要文本
10.1038/s41586-021-03819-2 PMC8287551
``` #### 独特的 PubMed 字段 **MeSH 术语**:受控词汇表 ```xml Diabetes Mellitus ``` **出版类型**: ```xml Journal Article Randomized Controlled Trial ``` **资助信息**: ```xml R01-123456 NIAID NIH HHS United States ``` ### arXiv API **物理、数学、计算机科学、定量生物学的预印本**——免费开放获取。 **基础 URL**:`http://export.arxiv.org/api/query` **无需 API 密钥** #### arXiv ID 转元数据 **请求**: ``` GET http://export.arxiv.org/api/query?id_list=2103.14030 ``` **响应**:Atom XML ```xml http://arxiv.org/abs/2103.14030v2 Highly accurate protein structure prediction with AlphaFold John Jumper Richard Evans 2021-03-26T17:47:17Z 2021-07-01T16:51:46Z 此处为摘要文本... 10.1038/s41586-021-03819-2 ``` #### 关键字段 - `id`:arXiv URL - `title`:预印本标题 - `author`:作者列表 - `published`:首个版本日期 - `updated`:最新版本日期 - `summary`:摘要 - `arxiv:doi`:如已发表则为 DOI - `arxiv:journal_ref`:如已发表则为期刊引用 - `category`:arXiv 分类 #### 版本追踪 arXiv 追踪版本: - `v1`:初始提交 - `v2`、`v3` 等:修订版本 **始终检查**预印本是否已在期刊上发表(如有 DOI 则使用)。 ### DataCite API **研究数据集、软件及其他成果**——为非传统学术作品分配 DOI。 **基础 URL**:`https://api.datacite.org/dois/` **与 CrossRef 类似**,但适用于数据集、软件、代码等。 **请求**: ``` GET https://api.datacite.org/dois/10.5281/zenodo.1234567 ``` **响应**:包含数据集/软件元数据的 JSON ## BibTeX 必填字段 ### @article(期刊文章) **必填**: - `author`:作者姓名 - `title`:文章标题 - `journal`:期刊名称 - `year`:出版年份 **可选但推荐**: - `volume`:卷号 - `number`:期号 - `pages`:页码范围(例如 123--145) - `doi`:数字对象标识符 - `url`:无 DOI 时的 URL - `month`:出版月份 **示例**: ```bibtex @article{Smith2024, author = {Smith, John and Doe, Jane}, title = {Novel Approach to Protein Folding}, journal = {Nature}, year = {2024}, volume = {625}, number = {8001}, pages = {123--145}, doi = {10.1038/nature12345} } ``` ### @book(图书) **必填**: - `author` 或 `editor`:作者或编者 - `title`:书名 - `publisher`:出版商名称 - `year`:出版年份 **可选但推荐**: - `edition`:版次(若非第一版) - `address`:出版商所在地 - `isbn`:ISBN - `url`:URL - `series`:丛书名称 **示例**: ```bibtex @book{Kumar2021, author = {Kumar, Vinay and Abbas, Abul K. and Aster, Jon C.}, title = {Robbins and Cotran Pathologic Basis of Disease}, publisher = {Elsevier}, year = {2021}, edition = {10}, isbn = {978-0-323-53113-9} } ``` ### @inproceedings(会议论文) **必填**: - `author`:作者姓名 - `title`:论文标题 - `booktitle`:会议/论文集名称 - `year`:年份 **可选但推荐**: - `pages`:页码范围 - `organization`:主办机构 - `publisher`:出版商 - `address`:会议地点 - `month`:会议月份 - `doi`:如有则填 DOI **示例**: ```bibtex @inproceedings{Vaswani2017, author = {Vaswani, Ashish and Shazeer, Noam and others}, title = {Attention is All You Need}, booktitle = {Advances in Neural Information Processing Systems}, year = {2017}, pages = {5998--6008}, volume = {30} } ``` ### @incollection(图书章节) **必填**: - `author`:章节作者 - `title`:章节标题 - `booktitle`:书名 - `publisher`:出版商名称 - `year`:出版年份 **可选但推荐**: - `editor`:图书编者 - `pages`:章节页码范围 - `chapter`:章节编号 - `edition`:版次 - `address`:出版商所在地 **示例**: ```bibtex @incollection{Brown2020, author = {Brown, Peter O. and Botstein, David}, title = {Exploring the New World of the Genome with {DNA} Microarrays}, booktitle = {DNA Microarrays: A Molecular Cloning Manual}, editor = {Eisen, Michael B. and Brown, Patrick O.}, publisher = {Cold Spring Harbor Laboratory Press}, year = {2020}, pages = {1--45} } ``` ### @phdthesis(学位论文) **必填**: - `author`:作者姓名 - `title`:论文标题 - `school`:机构名称 - `year`:年份 **可选**: - `type`:类型(例如"PhD dissertation") - `address`:机构所在地 - `month`:月份 - `url`:URL **示例**: ```bibtex @phdthesis{Johnson2023, author = {Johnson, Mary L.}, title = {Novel Approaches to Cancer Immunotherapy}, school = {Stanford University}, year = {2023}, type = {{PhD} dissertation} } ``` ### @misc(预印本、软件、数据集) **必填**: - `author`:作者 - `title`:标题 - `year`:年份 **预印本需补充**: - `howpublished`:存储库(例如"bioRxiv") - `doi`:预印本 DOI - `note`:预印本 ID **示例(预印本)**: ```bibtex @misc{Zhang2024, author = {Zhang, Yi and Chen, Li and Wang, Hui}, title = {Novel Therapeutic Targets in Alzheimer's Disease}, year = {2024}, howpublished = {bioRxiv}, doi = {10.1101/2024.01.001}, note = {Preprint} } ``` **示例(软件)**: ```bibtex @misc{AlphaFold2021, author = {DeepMind}, title = {{AlphaFold} Protein Structure Database}, year = {2021}, howpublished = {Software}, url = {https://alphafold.ebi.ac.uk/}, doi = {10.5281/zenodo.5123456} } ``` ## 提取工作流 ### 从 DOI 提取 **最佳实践**——最可靠的来源: ```bash # 单个 DOI python scripts/extract_metadata.py --doi 10.1038/s41586-021-03819-2 # 多个 DOI python scripts/extract_metadata.py \ --doi 10.1038/nature12345 \ --doi 10.1126/science.abc1234 \ --output refs.bib ``` **流程**: 1. 用 DOI 查询 CrossRef API 2. 解析 JSON 响应 3. 提取必填字段 4. 确定条目类型(@article、@book 等) 5. 格式化为 BibTeX 6. 验证完整性 ### 从 PMID 提取 **适用于生物医学文献**: ```bash # 单个 PMID python scripts/extract_metadata.py --pmid 34265844 # 多个 PMID python scripts/extract_metadata.py \ --pmid 34265844 \ --pmid 28445112 \ --output refs.bib ``` **流程**: 1. 用 PMID 查询 PubMed EFetch 2. 解析 XML 响应 3. 提取元数据(包括 MeSH 术语) 4. 检查响应中是否有 DOI 5. 如有 DOI,可选地查询 CrossRef 获取更多元数据 6. 格式化为 BibTeX ### 从 arXiv ID 提取 **适用于预印本**: ```bash python scripts/extract_metadata.py --arxiv 2103.14030 ``` **流程**: 1. 用 ID 查询 arXiv API 2. 解析 Atom XML 响应 3. 检查已发表版本(响应中的 DOI) 4. 如已发表:使用 DOI 和 CrossRef 5. 如未发表:使用预印本元数据 6. 格式化为 @misc 并附上预印本说明 **重要提示**:始终检查预印本是否已发表! ### 从 URL 提取 **当你只有 URL 时**: ```bash python scripts/extract_metadata.py \ --url "https://www.nature.com/articles/s41586-021-03819-2" ``` **流程**: 1. 解析 URL 提取标识符 2. 识别类型(DOI、PMID、arXiv) 3. 从 URL 中提取标识符 4. 查询相应的 API 5. 格式化为 BibTeX **URL 模式**: ``` # DOI URL https://doi.org/10.1038/nature12345 https://dx.doi.org/10.1126/science.abc123 https://www.nature.com/articles/s41586-021-03819-2 # PubMed URL https://pubmed.ncbi.nlm.nih.gov/34265844/ https://www.ncbi.nlm.nih.gov/pubmed/34265844 # arXiv URL https://arxiv.org/abs/2103.14030 https://arxiv.org/pdf/2103.14030.pdf ``` ### 批量处理 **从包含混合标识符的文件**: ```bash # 创建每行一个标识符的文件 # identifiers.txt: # 10.1038/nature12345 # 34265844 # 2103.14030 # https://doi.org/10.1126/science.abc123 python scripts/extract_metadata.py \ --input identifiers.txt \ --output references.bib ``` **流程**: - 脚本自动检测标识符类型 - 查询相应的 API - 全部合并到单个 BibTeX 文件中 - 优雅地处理错误 ## 特殊情况和边缘情况 ### 预印本后来发表 **问题**:引用了预印本,但期刊版本现已可用。 **解决方案**: 1. 检查 arXiv 元数据中的 DOI 字段 2. 如存在 DOI,使用已发表版本 3. 将引用更新为期刊文章 4. 如需,在注释中注明预印本版本 **示例**: ```bibtex % 原为:arXiv:2103.14030 % 发表为: @article{Jumper2021, author = {Jumper, John and Evans, Richard and others}, title = {Highly Accurate Protein Structure Prediction with {AlphaFold}}, journal = {Nature}, year = {2021}, volume = {596}, pages = {583--589}, doi = {10.1038/s41586-021-03819-2} } ``` ### 多位作者(等) **问题**:作者众多(10+ 位)。 **BibTeX 实践**: - 若 <10 位则包含所有作者 - 10+ 位使用"and others" - 或列出全部(各期刊做法不同) **示例**: ```bibtex @article{LargeCollaboration2024, author = {First, Author and Second, Author and Third, Author and others}, ... } ``` ### 作者姓名变体 **问题**:作者以不同姓名格式发表文章。 **标准化**: ``` # 常见变体 John Smith John A. Smith John Andrew Smith J. A. Smith Smith, J. Smith, J. A. # BibTeX 格式(推荐) author = {Smith, John A.} ``` **提取优先级**: 1. 尽可能使用全名 2. 如有则包含中间名首字母 3. 格式:姓, 名 中间名 ### 无可用 DOI **问题**:较早的论文或不带 DOI 的图书。 **解决方案**: 1. 如有则使用 PMID(生物医学) 2. 图书使用 ISBN 3. 使用指向稳定来源的 URL 4. 包含完整的出版详情 **示例**: ```bibtex @article{OldPaper1995, author = {Author, Name}, title = {Title Here}, journal = {Journal Name}, year = {1995}, volume = {123}, pages = {45--67}, url = {https://stable-url-here}, note = {PMID: 12345678} } ``` ### 会议论文 vs 期刊文章 **问题**:同一作品在两者中都发表了。 **最佳实践**: - 若两者都有,引用期刊版本 - 期刊版本具有存档性 - 会议版本注重时效性 **若引用会议**: ```bibtex @inproceedings{Smith2024conf, author = {Smith, John}, title = {Title}, booktitle = {Proceedings of NeurIPS 2024}, year = {2024} } ``` **若引用期刊**: ```bibtex @article{Smith2024journal, author = {Smith, John}, title = {Title}, journal = {Journal of Machine Learning Research}, year = {2024} } ``` ### 图书章节 vs 编辑文集 **正确提取**: - 章节:使用 `@incollection` - 全书:使用 `@book` - 图书编者:填写在 `editor` 字段中 - 章节作者:填写在 `author` 字段中 ### 数据集和软件 **使用 @misc** 并填写相应字段: ```bibtex @misc{DatasetName2024, author = {Author, Name}, title = {Dataset Title}, year = {2024}, howpublished = {Zenodo}, doi = {10.5281/zenodo.123456}, note = {Version 1.2} } ``` ## 提取后验证 始终验证提取的元数据: ```bash python scripts/validate_citations.py extracted_refs.bib ``` **检查**: - 所有必填字段均已存在 - DOI 正确解析 - 作者姓名格式一致 - 年份合理(4 位数字) - 期刊/出版商名称正确 - 页码范围使用 -- 而非 - - 特殊字符处理正确 ## 最佳实践 ### 1. 优先使用 DOI DOI 提供: - 永久标识符 - 最佳元数据来源 - 出版商验证的信息 - 可解析的链接 ### 2. 验证自动提取的元数据 抽查: - 作者姓名与出版物一致 - 标题匹配(包括大小写) - 年份正确 - 期刊名称完整 ### 3. 处理特殊字符 **LaTeX 特殊字符**: - 保护大写:`{AlphaFold}` - 处理重音符号:`M{\"u}ller` 或使用 Unicode - 化学式:`H$_2$O` 或 `\ce{H2O}` ### 4. 使用一致的引用键 **约定**:`FirstAuthorYEARkeyword` ``` Smith2024protein Doe2023machine Johnson2024cancer ``` ### 5. 现代论文包含 DOI 约 2000 年后发表的所有论文都应包含 DOI: ```bibtex doi = {10.1038/nature12345} ``` ### 6. 记录来源 对于非标准来源,添加注释: ```bibtex note = {Preprint, not peer-reviewed} note = {Technical report} note = {Dataset accompanying [citation]} ``` ## 总结 元数据提取工作流: 1. **识别**:确定标识符类型(DOI、PMID、arXiv、URL) 2. **查询**:使用相应的 API(CrossRef、PubMed、arXiv) 3. **提取**:解析响应以获取必填字段 4. **格式化**:创建格式正确的 BibTeX 条目 5. **验证**:检查完整性和准确性 6. **核实**:抽查关键引用 **使用脚本**自动化: - `extract_metadata.py`:通用提取器 - `doi_to_bibtex.py`:快速 DOI 转换 - `validate_citations.py`:验证准确性 **始终验证**最终提交前的提取元数据!