Zotero 文献管理
文献库用久了都会脏:导出的 BibTeX/RIS 里混着重复条目、缺作者缺年份、DOI 抄错、标题一个带标点一个不带——真到写论文要用的时候才发现,回头一条条查又极耗时。这个技能只干机械活:读一份结构化文献记录,先把字段问题挑出来,再查重、统计、生成示例引用串。
何时使用
| 用户说法 | 是否触发 |
|---|---|
| 帮我看看这批 BibTeX 导出的文献有没有问题 | 是 |
| 帮我查一下文献库里有没有重复的条目 | 是 |
| 按类型和年份统计一下我收藏的文献 | 是 |
| 生成一条 GB/T 7714 / APA 格式的引用 | 是 |
| 这条文献的 DOI 格式对不对 | 是 |
| 帮我代写论文正文 / 伪造或补全不存在的参考文献 | 否(本技能不代写论文、不伪造引用、不规避查重) |
输入
一份结构化文献记录(JSON 文件,UTF-8),根含 items:
{
"items": [
{
"key": "zhang2020",
"type": "journal",
"title": "T",
"authors": ["张三"],
"year": 2020,
"journal": "J",
"volume": "5",
"pages": "1-10",
"doi": "",
"tags": ["机器学习"],
"note": ""
}
]
}
字段说明:
| 字段 | 含义 | 约束 |
|---|---|---|
key |
条目唯一标识 | 必填、唯一 |
type |
文献类型 | journal(期刊[J])/ book(专著[M])/ conference(会议[C]) |
title |
标题 | 必填(缺失标 warn) |
authors |
作者列表 | 空数组或缺失标 warn |
year |
年份 | 4 位数字且落在 [1500, 2100] |
journal |
刊名 / 出版者 / 会议论文集名 | 生成引用串时使用 |
volume |
卷 | 可选 |
pages |
页码 | 可选 |
doi |
DOI | 可选;填写时须形如 10.xxxx/... |
tags |
标签列表 | 用于 top tags 统计 |
note |
备注 | 不参与校验与统计 |
子命令
check · 逐条字段校验
python3 scripts/literature_manager.py check --input items.json
python3 scripts/literature_manager.py check --input items.json --json
逐条输出 [ERROR]/[WARN] 规则 第 N 条:说明,末行汇总「问题 N 条(error X / warn Y)」。
dedupe · 查重
python3 scripts/literature_manager.py dedupe --input items.json
python3 scripts/literature_manager.py dedupe --input items.json --json
输出两类:重复 key 组(同一 key 出现多次)与疑似重复条目(标题归一化后相同:去空白、去标点、转小写)。两条都只是「疑似」,是否合并由人工判断。
stats · 归类统计
python3 scripts/literature_manager.py stats --input items.json
python3 scripts/literature_manager.py stats --input items.json --json
输出:记录总数、按 type 计数、按年份区间(十年一档)计数、按年份缺失或非法计数、top tags 计数(取前 5)。
format · 生成示例引用串
python3 scripts/literature_manager.py format --input items.json --key zhang2020
python3 scripts/literature_manager.py format --input items.json --key zhang2020 --style apa
--style 取值 gbt7714(默认)或 apa;按 type 自动选择 [J]/[M]/[C] 类型标识。
rules · 规则表
python3 scripts/literature_manager.py rules
python3 scripts/literature_manager.py rules --json
规则表(7 条:2 error + 5 warn)
| 规则 | 级别 | 范围 | 触发条件 |
|---|---|---|---|
missing_key |
error | 条目 | 缺 key |
duplicate_key |
error | 条目组 | 同一 key 出现多次 |
missing_title |
warn | 条目 | 缺 title |
missing_authors |
warn | 条目 | authors 为空数组或缺失 |
bad_year |
warn | 条目 | year 非 4 位数字或不在 [1500, 2100] |
bad_doi |
warn | 条目 | doi 非 10.xxxx/... 形式 |
duplicate_title |
warn | 条目组 | 两条及以上标题归一化后相同 |
输出与退出码
- 退出码
0:check 无 error 级问题 / dedupe 未发现重复 / stats、format、rules 正常; - 退出码
1:check 发现 error 级问题 / dedupe 发现重复组 / format 未找到指定 key; - 退出码
2:用法或读取错误(文件不存在、缺子命令、未知子命令、未知--style、缺--key、JSON 解析失败)。
--json 输出:check → issues[]/counts{error,warn}/total/valid/count;dedupe → duplicate_keys[]/title_duplicates[]/total_groups/found;stats → total/by_type/by_year_range/unknown_year/top_tags;format → style/key/citation。
使用示例
# 1. 校验一份合法文献库
python3 scripts/literature_manager.py check --input test-samples/items_ok.json
# → 未发现问题(共 4 条记录),退出码 0
# 2. 一份埋了错误的文献库
python3 scripts/literature_manager.py check --input test-samples/items_broken.json
# → 问题 6 条(error 1 / warn 5):重复 key、标题重复、缺标题、缺作者、年份非法、DOI 形式错误
# 3. 查重
python3 scripts/literature_manager.py dedupe --input test-samples/items_broken.json
# → 重复 key 1 组(dup1);疑似重复条目 1 组(gammastudy:第 3、4 条)
# 4. 归类统计
python3 scripts/literature_manager.py stats --input test-samples/items_ok.json
# → 总数 4;journal 2、book 1、conference 1;2010-2019 2、2020-2029 2
# 5. 生成一条 GB/T 7714 示例引用
python3 scripts/literature_manager.py format --input test-samples/items_ok.json --key zhang2020
# → 张三. T[J]. J, 2020, 5: 1-10.
注意事项
- 只做结构化整理:校验、查重、统计、引用格式都是对用户提供的记录做机械处理,不引入任何外部数据。
- 不提供学术不端功能:本技能不代写论文正文、不润色或拔高学术观点、不伪造或补全不存在的参考文献、不规避查重降重、不批量编造引用。
- 引用格式为示例样式:
gbt7714与apa输出都是简化示意串(作者. 题名[J]. 刊名, 年, 卷: 页码. 之类),不是完整实现的目标规范,投稿或交作业前须按目标期刊或学校要求逐字核对。 - 查重是「疑似」不是「判定」:标题归一化只做去空白、去标点、转小写,中文繁简、同义改写、中英文不同版本都识别不出,命中结果需人工确认。
- 不联网、不写文件:默认只向 stdout 打印,不连接 Zotero API 或任何在线数据库,不改输入文件、不改动原始数据。
边界声明
只做文献记录的结构化整理、查重、统计与引用格式草稿;不代写论文、不伪造引用、不规避查重、不提供任何学术不端功能;引用格式为示例样式,须按目标期刊或学校规范核对;查重结果只是「疑似重复」提示,不构成任何认定结论;输入记录的字段由用户自己提供,可能不完整或有误,统计与校验结果均需人工核对;不联网(不连接 Zotero API)、不写文件、不改动原始数据。