我如何准备使用整个维基百科进行自然语言处理?

How do I prepare to use entire wikipedia for natural language processing?

我有点陌生。我有一个项目,我必须为 NLP 下载和使用维基百科。我面临的问题如下: 我只有 12 GB 的 RAM,但英文 wiki 转储已压缩超过 15 GB。这会限制我对 wiki 的处理吗?我不需要来自 wiki 的任何图片。我需要在处理之前解压缩转储吗?有人可以告诉我所需的步骤或指向我的相关内容吗? 提前致谢。

处理维基百科转储最简单的方法是依赖 kiwix.org 转储,您可以在以下位置找到:https://wiki.kiwix.org/wiki/Content_in_all_languages

然后使用 python 您可以执行以下操作

% wget http://download.kiwix.org/zim/wiktionary_eo_all_nopic.zim
...
% pip install --user libzim
% ipython
In [2]: from libzim.reader import File

In [3]: total = 0
   ...:
   ...: with File("wiktionary_eo_all_nopic.zim") as reader:
   ...:     for uid in range(0, reader.article_count):
   ...:         page = reader.get_article_by_id(uid)
   ...:         total += len(page.content)
   ...: print(total)

这是一个简单的处理,你应该明白了开始。特别是,截至 2020 年,使用 wikimarkup 的原始维基百科转储非常难以处理,因为如果没有完整的维基媒体设置,您无法将 wikimarkup 转换为 html 包括信息框。还有 REST API 但为什么工作已经完成时还要挣扎 :)

关于处理后数据存储在哪里,我认为行业标准是 PostgreSQL 或 ElasticSearch(这也需要大量内存)但我真的很喜欢 hoply, and more generally OKVS

如果您想直接处理 XML 转储,您可以下载多流版本。

multistream 允许使用索引根据需要解压缩部分,而不必解压缩整个内容。

这允许您从压缩转储中提取文章。

有关文档,请参阅 https://meta.wikimedia.org/wiki/Data_dumps/Dump_format#Multistream_dumps。使用此信息,您可以从转储中获取任何给定的文章,而无需将其加载到内存中。

如果您想解析整个维基百科,您可以一次解析其中一个多流文件(约 100 篇文章),这应该可以满足您的资源需求。 https://jamesthorne.co.uk/blog/processing-wikipedia-in-a-couple-of-hours/.

中显示了有关如何操作的示例