WikiExtractor:从 Wikipedia 转储中提取纯文本的实用工具
用于从维基百科转储中提取纯文本的工具。警告**:由于 Windows 上的 Python 实现中对 StringIO 的支持不佳,已在 Windows 上报告了问题。
秒懂
- 它是什么?
- WikiExtractor 是一个 Python 脚本,用于从 Wikipedia 数据库转储中提取并清理纯文本。它支持多进程处理、模板展开和多种输出格式,但 Windows 用户需要谨慎。
- 适合谁用?
- WikiExtractor 适合需要从 Wikipedia 转储中快速提取干净文本的研究者、NLP 工程师和数据科学家。它无需额外依赖,支持多进程和模板缓存,能显著加速重复提取。
- 能商用吗?
- 可以,但条件严格。AGPL-3.0 是网络 copyleft 许可证:如果别人通过网络使用你修改过的版本(例如作为托管服务),你必须以同一许可证向他们提供源代码。
- 还在维护吗?
- 在维护。仓库最近一次提交在 10 天前。
- 用什么语言写的?
- 主要是 Python(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决什么问题
Wikipedia 的原始转储文件是 XML 格式,包含大量 wiki 标记、模板和元数据。直接使用这些数据做文本分析或训练模型非常麻烦。WikiExtractor 正是为此而生:它从转储中提取纯文本,并清理掉 wiki 标记,输出为结构化的文档格式。它面向的是需要干净文本的开发者、研究者和数据科学家,而不是 Wikipedia 的日常读者。
核心机制:模板展开与缓存
WikiExtractor 的独特之处在于它处理模板的方式。文档说明,它通过预处理整个转储并提取模板定义来实现模板展开。这意味着它不只是简单地移除模板标记,而是先收集模板内容,再在文章中展开它们。为了加速,它使用多进程并行处理文章,并维护一个已解析模板的缓存。这个缓存只在重复提取时有用,因为首次提取时你需要先构建它。
安装与基本用法
你可以通过 pip 安装:`pip install wikiextractor`,或者从源码运行 `python setup.py install`。安装后,直接调用 `python -m wikiextractor.WikiExtractor <Wikipedia dump file>` 即可。输出会存放在一个目录中,按大小分割成多个文件,每个文件包含多个文档,格式为 `<doc id="" url="" title="">...</doc>`。如果你使用 `--json` 标志,输出会变成 JSON 格式。
关键选项:模板控制与性能
`--templates` 选项可以将模板定义保存到本地文件,下次提取时重新加载,从而节省时间。但文档警告,如果模板定义已更改,缓存可能失效。`--no-templates` 选项会显著加速提取,因为它跳过了模板展开的昂贵步骤。对于只需要正文文本、不需要模板内容的场景,这个选项很实用。其他选项包括 `--bytes` 控制输出文件大小(默认 1M),`--compress` 使用 bzip 压缩输出,`--namespaces` 过滤命名空间。
Cirrus Extractor 与 extractPage
除了主脚本,项目还提供两个辅助工具。`cirrus-extractor.py` 处理 Cirrus 转储,这种转储已经包含展开后的模板文本,因此不需要模板展开步骤。它的输出格式类似,但额外包含 `language` 和 `revision` 属性。`extractPage` 则用于从转储中提取单个页面,通过 `--id` 指定文章编号或 `--template` 指定模板编号。这个工具适合快速查看或调试,而不是批量处理。
已知限制:Windows 问题
README 明确警告:在 Windows 上,由于 Python 实现中 StringIO 支持不佳,已报告问题。这是一个具体的兼容性风险。如果你在 Windows 上运行,可能会遇到崩溃或错误。最新的 v3.1.0 版本标记为“Windows compatibility”,表明开发者试图修复,但文档仍然保留警告,说明问题可能未完全解决。建议在 Linux 或 macOS 上运行,或者至少先在 Windows 上测试一个小型转储。
替代方案与差异
一个常见的替代方案是直接使用 Wikipedia 的 API 或数据库副本,但那是为在线查询设计的,不适合批量提取。更接近的替代是 mwparserfromhell,它专注于解析 wiki 标记,但需要你自行处理模板展开和转储解析。WikiExtractor 的优势在于它是一个完整的管道,从转储到纯文本一步到位,而 mwparserfromhell 需要你构建更多逻辑。另一个选择是使用 Hugging Face 的 datasets 库加载预处理的 Wikipedia 数据集,但那是别人处理好的,你无法控制模板展开的细节。
维护与许可
项目最近一次推送是 2026 年 8 月,v3.1.0 和 v3.0.8 都在近期发布,表明维护活跃。v3.0.8 更新了 Python 正则表达式,v3.1.0 专门处理 Windows 兼容性。许可为 AGPL-3.0,这意味着如果你修改代码并部署为网络服务,需要开源你的修改。这不是一个宽松的许可,商业项目需要仔细评估。
编辑结论
WikiExtractor 适合需要从 Wikipedia 转储中快速提取干净文本的研究者、NLP 工程师和数据科学家。它无需额外依赖,支持多进程和模板缓存,能显著加速重复提取。但 Windows 用户应谨慎,因为文档明确警告 StringIO 在 Windows 上的支持不佳。如果你只需要处理单个页面,使用 extractPage 工具更轻量。如果你需要处理已展开模板的 Cirrus 转储,应使用 cirrus-extractor.py。在采用前,建议先在小型转储上测试输出格式和命名空间过滤,确认 --templates 缓存是否对你的重复提取场景有效,并检查 AGPL-3.0 许可是否与你的项目兼容。
社区笔记