智能文献搜索与批量下载工具,支持高级检索和并发下载
Project description
PDFGet - 智能文献搜索与批量下载工具
智能文献搜索与批量下载工具,支持高级检索和并发下载。
1. 项目概述
PDFGet是一个专为科研工作者设计的智能文献搜索与批量下载工具,集成了PubMed、Europe PMC等权威学术数据库,通过模块化架构提供高效的文献获取和管理功能。
1.1 主要特性
- 🔍 智能文献搜索:支持高级检索语法,可按作者、期刊、年份等精确搜索
- 📊 PMCID统计分析:快速统计文献的开放获取情况,支持多种输出格式
- 📥 批量PDF下载:自动下载开放获取文献,支持并发下载和智能重试
- 📋 混合标识符下载:支持从CSV文件读取PMCID/PMID/DOI混合列表,自动识别并下载
- 🔗 多数据源支持:集成PubMed(默认)和Europe PMC数据库
- 💾 智能缓存机制:避免重复API请求和下载,提升效率
- 🎯 双模式操作:统计模式(默认)和下载模式,满足不同需求
- 📝 摘要自动补充:自动从XML获取缺失的摘要,提高数据完整性(仅Europe PMC)
2. 安装与配置
2.1 系统要求
- Python 3.12 或更高版本
- 推荐使用 uv 包管理器以获得最佳体验
详细依赖信息请查看 pyproject.toml 文件。
2.2 安装方法
# 使用pip安装
pip install pdfget
# 使用uv安装(推荐)
uv add pdfget
# 或从源码安装
git clone https://github.com/gqy20/pdfget.git
cd pdfget
pip install -e .
2.3 快速开始
安装完成后,您可以直接使用 pdfget 命令:
# 搜索文献(默认统计模式,显示PMCID信息)
pdfget -s "machine learning" -l 20
# 下载PDF(添加-d参数)
pdfget -s "deep learning" -l 50 -d
# 使用自己的邮箱和API密钥(可选,提高搜索请求限制)
pdfget -s "quantum" -l 30 -e your-email@example.com -k your-api-key
# 指定Europe PMC作为数据源(自动补充摘要)
pdfget -s "quantum" -S europe_pmc -l 30
# 使用多个数据源搜索
pdfget -s "cancer immunotherapy" -S both -l 100
# 从CSV文件批量下载(支持PMCID/PMID/DOI混合)
pdfget -m examples/identifiers.csv
pdfget -m examples/identifiers.csv -c ID
pdfget -m examples/pmcids.csv -c PMCID
# 单个或多个标识符下载
pdfget -m "PMC123456"
pdfget -m "PMC123456,38238491" # PMCID和PMID混合
pdfget -m "10.1186/s12916-020-01690-4" # DOI下载
pdfget -m "10.1186/s12916-020-01690-4,38238491,PMC123456" # PMCID/PMID/DOI混合
如果您使用 uv 作为包管理器,也可以:
# 使用uv运行
uv run pdfget -s "machine learning" -l 20
说明:
- 搜索时默认进入统计模式,显示PMCID统计信息
- 添加
-d参数进入下载模式,下载开放获取的PDF - PubMed 是默认数据源,可指定
europe_pmc或both - 邮箱和API密钥是可选的,仅用于提高搜索请求限制(3→10次/秒)
- 下载功能不需要API密钥,使用公开的开放获取服务
3. 高级检索语法
PDFGet 支持两种主要模式:统计模式(默认)和下载模式(使用 -d 参数)。
3.1 免费全文过滤
方法一:PMC 全文过滤(推荐,100% 可下载)
使用 pubmed pmc[sb] 过滤器只返回在 PubMed Central 中收录的文献,所有结果都可以下载:
# 搜索 PMC 收录的癌症文献(100% 可下载)
pdfget -s "cancer AND pubmed pmc[sb]" -l 100 -d
# 基因家族研究
pdfget -s '"gene family" AND pubmed pmc[sb]' -l 200
# 配合年份限制
pdfget -s '"machine learning" AND pubmed pmc[sb] 2020:2023[pd]' -l 100 -d
方法二:免费全文过滤
使用 filter[free full text] 包含所有类型的免费全文:
# 搜索有免费全文的高血压文献
pdfget -s "hypertension filter[free full text]" -l 100
# 搜索特定领域的免费全文文献
pdfget -s "machine learning filter[free full text]" -l 50 -d
重要说明:
pubmed pmc[sb]:只返回 PMC 收录文献,100% 可下载(推荐)filter[free full text]:包含所有免费全文,约 30-40% 可下载- 包括:期刊官网免费全文、作者主页、机构仓库等
- 这些免费全文不一定被 PMC 收录,PDFGet 无法下载
- 较新的文献(<1年)被 PMC 收录的概率较低
- 配合年份过滤效果更好,例如:
"cancer AND pubmed pmc[sb] 2020:2023[pd]"
为什么有这种差异? 许多期刊提供免费的开放获取(Open Access),但这些文献:
- 可能只存在于期刊官网
- 可能需要 6-12 个月的延迟才被 PMC 收录
- 有些期刊选择不在 PMC 存放全文
- PDFGet 只能从 PMC 下载,无法处理其他来源
建议:
- 如果需要确保可下载:使用
pubmed pmc[sb] - 如果想发现更多免费文献(即使不能使用当前软件下载):使用
filter[free full text]
3.2 布尔运算符
# AND: 同时包含多个关键词
pdfget -s "cancer AND immunotherapy" -l 30
# OR: 包含任意关键词
pdfget -s "machine OR deep learning" -l 20
# NOT: 排除特定词汇
pdfget -s "cancer AND immunotherapy NOT review" -l 30
# 复杂组合
pdfget -s "(cancer OR tumor) AND immunotherapy NOT mice" -l 25
# 下载模式(添加-d)
pdfget -s "cancer AND immunotherapy" -l 30 -d
3.2 字段检索
# 标题检索
pdfget -s 'title:"deep learning"' -l 15
# 作者检索
pdfget -s 'author:hinton AND title:"neural networks"' -l 10
# 期刊检索
pdfget -s 'journal:Nature AND cancer' -l 20
# 年份检索
pdfget -s 'cancer AND year:2023' -l 15
# 组合检索(PubMed风格)
pdfget -s '"machine learning"[TI] AND author:hinton' -S pubmed -l 10
3.3 短语和精确匹配
# 短语检索(用双引号)
pdfget -s '"quantum computing"' -l 10
# 混合使用
pdfget -s '"gene expression" AND (cancer OR tumor) NOT review' -l 20
3.4 实用检索技巧
- 使用括号分组复杂的布尔逻辑
- 短语用双引号确保精确匹配
- 可以组合多个字段进行精确检索
- 使用 NOT 过滤掉不相关的结果(如综述、评论等)
- 统计模式:搜索并显示PMCID统计信息(默认行为)
- 下载模式:搜索并下载开放获取的PDF(添加
-d参数)
4. 命令行参数详解
4.1 核心参数
-s QUERY: 搜索文献-m INPUT: 批量输入(支持三种模式)- CSV文件路径:
pdfget -m data.csv - 单个标识符:
pdfget -m "PMC123456" - 逗号分隔列表:
pdfget -m "PMC123,38238491"(PMCID/PMID/DOI混合)
- CSV文件路径:
-c COLUMN: CSV列名(默认自动检测:ID>PMCID>doi>pmid>第一列)-d: 下载PDF(不指定则为统计模式)
4.2 优化参数
-l NUM: 搜索结果数量(默认200)-S SOURCE: 数据源选择(pubmed/europe_pmc/both,默认pubmed)-t NUM: 并发线程数(默认3)--format FORMAT: 统计输出格式(console/json/markdown,默认console)-v: 详细输出
4.3 NCBI API 配置
-e EMAIL: NCBI API邮箱(提高请求限制,推荐设置)-k KEY: NCBI API密钥(推荐,便于监控使用情况)
配置示例:
# 使用自己的邮箱(推荐)
pdfget -s "cancer" -l 100 -e your-email@example.com
# 使用邮箱和API密钥
pdfget -s "machine learning" -l 500 -e your-email@example.com -k your-api-key
为什么要配置邮箱?
- 邮箱是可选的,但推荐配置以遵守NCBI使用政策
- 有助于 NCBI 在出现问题时联系您
获取 NCBI API 密钥(推荐):
重要说明:
- API 密钥可以将请求限制从 3 次/秒提高到 10 次/秒(仅用于搜索)
- API 密钥主要用于 NCBI 监控使用情况和问题追踪
- 虽不是必需,但建议配置以获得更好的搜索性能
下载功能说明:
- PDF 下载不需要 API 密钥(使用公开的 PMC OA Service)
- 下载通过以下公开服务进行:
- PMC Open Access Web Service
- Europe PMC 直接下载链接
- 只有 PubMed 搜索和 PMCID 获取需要使用 NCBI E-utilities API
Europe PMC 说明:
- Europe PMC 搜索不需要 API 密钥或邮箱
- 使用开放的 REST API,建议将请求速率控制在 10-15 次/秒以下
- 官方未明确说明速率限制,但根据第三方资料约为 20 次/秒
- 如果主要使用 Europe PMC 数据源,可以不配置任何认证信息
- 自动摘要补充:当 API 返回的记录缺少摘要时,自动从 XML 文件获取完整摘要,将摘要覆盖率从 87% 提升到 97%
5. 输出格式与文件结构
5.1 搜索结果格式
[
{
"pmid": "32353885",
"doi": "10.1186/s12916-020-01690-4",
"title": "文献标题",
"authors": ["作者1", "作者2"],
"journal": "期刊名称",
"year": "2023",
"abstract": "摘要内容",
"pmcid": "PMC7439635",
"source": "pubmed"
}
]
5.2 文件目录结构
data/
├── pdfs/ # 下载的PDF文件
├── cache/ # 缓存文件
└── search_results.json # 搜索结果记录
5.3 PMCID统计结果
当使用搜索功能(不指定 -d 参数)时,会返回开放获取文献统计信息:
{
"query": "关键词",
"total": 5000,
"checked": 200,
"with_pmcid": 90,
"without_pmcid": 110,
"rate": 45.0,
"elapsed_seconds": 30.5,
"processing_speed": 6.67
}
字段说明:
query: 搜索的关键词total: 数据库中匹配的文献总数checked: 实际检查的文献数量(由-l参数决定)with_pmcid: 有PMCID的文献数量without_pmcid: 无PMCID的文献数量rate: 有PMCID的文献百分比elapsed_seconds: 统计耗时processing_speed: 处理速度(篇/秒)
输出格式选项:
--format console: 控制台友好格式(默认)--format json: 结构化JSON格式,便于程序处理--format markdown: Markdown格式,便于文档生成
示例:
# 生成JSON格式的统计报告
pdfget -s "cancer" -l 100 --format json
# 生成Markdown格式的统计报告
pdfget -s "cancer" -l 100 --format markdown
5.4 混合标识符输入格式
-m 参数支持三种输入模式,自动识别:
模式1:CSV文件路径
# 自动检测列名(优先级:ID>PMCID>doi>pmid>第一列)
pdfget -m examples/identifiers.csv
# 手动指定列名
pdfget -m examples/identifiers.csv -c PMCID
pdfget -m examples/identifiers.csv -c ID
示例CSV文件:
ID,Title,Journal
PMC123456,Study on AI,Nature
38238491,Deep Learning Review,Science
PMC789012,Machine Learning Methods,Cell
37851234,Neural Network Research,Cell
模式2:单个标识符
pdfget -m "PMC123456" # PMCID
pdfget -m "38238491" # PMID
pdfget -m "10.1186/s12916-020-01690-4" # DOI
模式3:逗号分隔的多个标识符
pdfget -m "PMC123456,38238491" # PMCID和PMID混合
pdfget -m "10.1186/s12916-020-01690-4,38238491,PMC123456" # PMCID/PMID/DOI混合
支持的标识符类型:
- PMCID:支持带或不带PMC前缀(如"123456"或"PMC123456")
- PMID:6-10位纯数字
- DOI:以"10."开头的字符串
标识符处理流程:
- PMCID:直接下载
- PMID:自动转换为PMCID后下载(使用NCBI ESummary API)
- DOI:自动转换为PMCID后下载(使用Europe PMC API,支持CrossRef备选)
高级用法:
# 使用5个并发线程
pdfget -m examples/identifiers.csv -t 5
# 限制只下载前10个
pdfget -m examples/identifiers.csv -l 10
注意事项:
- PMID会自动转换为PMCID,转换成功率约80-90%(取决于文献是否被PMC收录)
- DOI会自动转换为PMCID,转换成功率约60-80%(取决于文献是否被PMC收录)
- 无法转换的PMID/DOI会被跳过,不会影响其他标识符的下载
- 列名检测不区分大小写
6. 功能实现状态
已实现功能 ✅
- PMCID直接下载(100%成功率)
- PMID自动转换为PMCID下载(80-90%成功率)
- DOI自动转换为PMCID下载(60-80%成功率)
- 高级检索语法支持
- 并发下载管理
- 智能缓存机制
- 多种输出格式(console/json/markdown)
- 混合标识符输入(PMCID/PMID/DOI)
- 批量处理CSV文件
- PMC开放获取统计分析
- Europe PMC API集成(主要数据源)
- CrossRef API辅助查询
- 批量DOI转换优化(100个DOI/30-60秒)
计划功能 📋
- 增强DOI转换(更多数据源)
- 用户认证支持(机构访问)
- 下载进度持久化
- GUI界面
- 插件系统
7. 故障排除
常见问题
PMID转换失败
问题:PMID无法转换为PMCID 可能原因:
- 文献未被PMC收录(约10-20%的文献)
- PMID格式不正确(应为6-10位数字)
- NCBI API临时限制
解决方案:
- 检查PMID格式:
echo "38238491" | wc -c应返回9 - 使用PMC过滤搜索:
pdfget -s "your query AND pubmed pmc[sb]" - 配置API密钥提高请求限制:
-e your-email@example.com -k your-api-key
下载速度较慢
问题:批量下载耗时较长 优化建议:
- 调整并发线程数:
-t 10(默认3) - 分批处理大量文献:
-l 100限制单次数量 - 使用PMC过滤确保100%可下载:
pubmed pmc[sb]
网络连接问题
问题:API请求超时或失败 解决方案:
- 检查网络连接
- 配置代理(如需要)
- 使用Europe PMC数据源:
-S europe_pmc - 重试失败的下载(程序会自动重试)
缓存问题
问题:使用了过期的缓存数据 解决方案:
# 清理搜索缓存
rm data/cache/search_*.json
# 清理PDF缓存(如需要)
rm data/pdfs/*.pdf
8. 许可证
本项目采用 MIT License,允许自由使用和修改。
9. 获取帮助
- 🔗 完整更新日志: CHANGELOG.md
- 📧 问题反馈: GitHub Issues
10. 相关链接
- 项目源码: GitHub Repository
- 问题反馈: GitHub Issues
- API文档:
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pdfget-0.1.3.tar.gz.
File metadata
- Download URL: pdfget-0.1.3.tar.gz
- Upload date:
- Size: 148.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b74bce9766f75cea678da33bca6e2f0216f679313ea2df395567a200aa4e3492
|
|
| MD5 |
2a5e99f050e253184d5d9ee04bdb1e6c
|
|
| BLAKE2b-256 |
c29810d91506fcec15b40de9fcdc8bbe2d6db0d5ed54bc5fc652ed01af496674
|
File details
Details for the file pdfget-0.1.3-py3-none-any.whl.
File metadata
- Download URL: pdfget-0.1.3-py3-none-any.whl
- Upload date:
- Size: 62.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ace2a0017c8f65253ae7ac3985ff74c1c2fb95ad0a9cda0b3dd5c5c115bd638
|
|
| MD5 |
c7b901cd75d0689f8ea26fa4071f6b69
|
|
| BLAKE2b-256 |
948a804a3ca76587c8de00c99dc254ad39a829e913362065f9a945eb1804bb34
|