维基百科转储文件结构差异 | AI生成和翻译
核心区别在于维基百科全文内容在多个文件中的存储方式——具体来说,每个.xml.bz2文件是仅包含单一修订流(非多流格式),还是包含多个压缩流捆绑在一起(多流格式)。
1. 非多流数据文件(旧式格式,或默认的“pages-articles”文件)
示例文件名:
enwiki-20251101-pages-articles1.xml-p1p41242.bz2
- 每个
.xml.bz2文件包含按页面ID排序的部分页面(例如第1–41242页) - 文件内仅包含连续的单向
<page>…</page>序列 - 单个页面的所有修订版本都集中存储在该页面的标签内(最新修订版+历史版本,如果下载的是“当前版本+历史”)
- 提取单篇文章只需使用任意XML/BZ2工具解压并解析大型XML文件
wget -c可完美实现断点续传,因为文件是单一bzip2流
2. 多流数据文件(文件名包含“multistream”的文件)
示例文件名(您链接的文件):
enwiki-20251101-pages-articles-multistream1.xml-p1p41242.bz2
- 覆盖相同的页面范围(p1p41242),但所有修订版本的全文不再存储在主XML文件中
- 实际存储方式:
- 主XML文件仅包含元数据(标题、ID、限制条件、最新修订时间戳等)和指向实际修订文本位置的指针(字节偏移量+长度)
- 实际修订文本分别存储在同一
.bz2文件内的多个小型压缩流中(因此称为“多流”)
- 通常配套提供
...-multistream-index1.txt.bz2索引文件,包含每个页面/修订版本的精确字节偏移量,便于工具直接跳转到对应压缩流进行提取,无需解压整个10–30GB的文件
这对wget -c有何影响?
实际操作中,以下两个命令:
wget -c https://.../enwiki-20251101-pages-articles1.xml-p1p41242.bz2
wget -c https://.../enwiki-20251101-pages-articles-multistream1.xml-p1p41242.bz2
在wget层面表现完全一致:两者都是标准的单bzip2文件,使用-c参数均可完美实现断点续传。
区别仅出现在开始处理下载文件时。
功能对比表
| 特性 | 非多流格式(常规) | 多流格式 |
|---|---|---|
| 文件名包含 | -pages-articlesN.xml-...bz2 |
-pages-articles-multistreamN.xml-...bz2 |
| 文章文本存储位置 | 在XML的<page><revision><text>...</text></revision></page>内 |
在XML外部,存储于独立的压缩流中 |
| 相同页面范围的文件大小 | 更大(通常为2–3倍) | 更小 |
| 随机访问/单页提取 | 较慢(需解压整个文件) | 极快(配合索引文件使用) |
| 直接兼容的工具 | 任意XML解析器(SAX、xmltodict等) | 维基媒体官方工具集(dump-generator、pywiki、mwxml等) |
| 是否需要配套索引文件? | 否 | 是(需-multistream-index....txt.bz2) |
wget -c断点续传支持 |
完美支持 | 完美支持(仍为单bzip2文件) |
如何选择下载版本?
- 若仅需全量顺序读取一次(如训练语言模型),非多流文件更简单易用
- 若需要快速检索单个页面,或注重磁盘空间与提取效率,强烈推荐多流格式+索引文件组合。目前几乎所有专业的维基媒体处理工具(WikiExtractor、gensim的WikiCorpus、jawiki脚本等)都预期或强烈建议使用多流版本
两种文件均可通过wget -c实现无忧断点续传——“多流”特性仅影响文件内部结构,不会改变HTTP/wget的传输机制。