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

问题描述 投票:0回答:3

我在这里有点新。我有一个项目,我必须下载并使用维基百科进行 NLP。我面临的问题如下: 我的 RAM 只有 12 GB,但英文 wiki 转储压缩后的大小超过 15 GB。这会限制我对 wiki 的处理吗?我不需要维基百科上的任何图片。在处理之前我需要解压缩转储吗?有人可以告诉我所需的步骤或向我指出相关内容吗? 预先感谢。

nlp wikipedia
3个回答
3
投票

处理 wikipedia 转储的最简单方法是依赖 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 的原始维基百科转储非常难以处理,因为如果没有完整的 wikimedia 设置,您无法将 wikimarkup 转换为 html(包括信息框)。还有 REST API,但是当工作已经完成时为什么还要挣扎 :)

关于处理后的数据存储位置,我认为行业标准是 PostgreSQL 或 ElasticSearch(也需要大量内存),但我真的很喜欢 hoply,更一般的是 OKVS


0
投票

如果您想直接处理 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/


0
投票

遵循amirouche_answer

from libzim.reader import Archive


PATH = "path/to/file.zim"
zim = Archive(PATH)
for uid in range(0, zim.article_count):
    entry = zim._get_entry_by_id(uid)
    # 'if' is to skip entries with extension
    # like .js, .css, .svg, .png
    if "." not in entry.title:
        print(entry.title)


# After you can:
entry = zim.get_entry_by_title("title")
buffer = entry.get_item().content
html_str = bytes(buffer).decode("UTF-8")
# you can process this html_str using
# for example 'from html.parser import HTMLParser'
© www.soinside.com 2019 - 2024. All rights reserved.