1. 项目背景与需求解析
最近在整理个人知识库时,发现一个痛点:维基百科的中文目录结构虽然完整,但每次查阅都需要联网访问网页,在移动设备或网络环境不佳时尤其不便。于是萌生了制作本地化txt格式目录的想法——这种纯文本格式体积小、兼容性强,可以在任何设备上快速检索,还能方便地导入各类笔记软件进行二次加工。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据获取方案对比
2.1 官方API接口调用
维基百科提供完善的MediaWiki API,通过构造特定请求可获取分类树数据。例如使用action=query&list=allcategories参数获取全部分类,配合acprop=size还能显示子分类数量。实测发现:
- 优点:数据权威完整,支持增量更新
- 缺点:需要处理API限流(建议设置1秒/请求)
- 关键代码示例:
python复制import requests
params = {
'action': 'query',
'list': 'allcategories',
'aclimit': '500',
'format': 'json'
}
response = requests.get('https://zh.wikipedia.org/w/api.php', params=params)
2.2 网页爬虫方案
对于不需要实时更新的场景,可爬取维基百科的分类索引页(如"特殊:所有页面")。使用BeautifulSoup解析时需注意:
- 处理分页导航(通常每页显示200条)
- 识别有效分类(排除讨论页、用户页等非内容页)
- 遵守robots.txt规则(建议设置5秒/页的延迟)
重要提示:无论采用哪种方案,务必在请求头中添加有效的User-Agent,并控制请求频率至多1次/秒
3. 数据结构化处理
3.1 多级目录构建
原始数据通常是扁平列表,需要通过分类前缀分析层级关系。例如:
- "计算机"和"计算机软件"存在父子关系
- "生物学"和"生物化学"是平行关系
实现算法建议:
- 按字符串长度排序(父分类通常更短)
- 用前缀匹配建立树形结构
- 处理特殊情况(如"历史/中国历史/三国"多级嵌套)
3.2 文本格式优化
最终输出的txt文件需要平衡可读性与机器可处理性:
text复制# 一级分类
## 二级分类
### 三级分类
- 具体条目1
- 具体条目2
实测发现Markdown风格的层级标识最便于后续处理,配合缩进能实现90%以上文本编辑器的折叠显示。
4. 实用功能扩展
4.1 交叉引用处理
维基百科特有的"分类重定向"(如"電腦"重定向到"计算机")需要特殊处理:
- 建立别名映射表
- 在输出文件中添加注释说明
- 保留原始分类ID便于更新
4.2 多版本管理
建议采用git管理目录文件,更新时:
- 保留历史版本(维基百科条目会频繁变更)
- 用diff工具分析变化
- 添加版本注释(如"2023Q4版")
5. 典型应用场景
5.1 本地知识图谱构建
将txt目录导入Obsidian等工具后:
- 可自动生成双向链接
- 配合插件实现可视化呈现
- 建立与本地文档的关联
5.2 自动化写作辅助
通过目录结构可以:
- 快速定位知识盲区
- 生成写作大纲
- 检查内容覆盖度
6. 常见问题解决方案
6.1 编码问题
中文字符处理建议:
- 输入输出统一使用UTF-8
- 在文件开头添加BOM标记
- 避免使用csv等易出错的中间格式
6.2 内容更新策略
建议采用增量更新方案:
- 每周获取最新变更日志
- 只下载变动的分类分支
- 合并前人工校验重大修改
7. 进阶优化方向
对于需要深度使用的场景,可以考虑:
- 添加分类热度指标(基于页面访问量)
- 标记优质条目(特色/优良条目)
- 嵌入分类描述摘要
- 生成多语言对照版本
这个项目最让我意外的收获是:通过整理目录结构,反而发现了维基百科知识体系中的一些有趣空白领域。比如在"应用科学"大类下,新兴的量子计算相关分类明显少于传统计算机分类,这某种程度上反映了知识沉淀的时间差。
