跳转到主要内容

维基百科HTML数据包解析

项目描述

mwparserfromhtml

mwparserfromhtml 是一个Python库,用于解析和挖掘由 维基媒体企业 最近发布的 Enterprise HTML 数据包中的元数据。可以通过 此位置 访问最新的6个Enterprise HTML数据包。该库的目的是提供一个接口来处理这些HTML数据包,并从文章中提取最相关的特征。

除了使用HTML存档之外,用户还可以使用维基百科API通过文章标题获取特定文章的HTML,并使用这个库解析HTML字符串。

动机

在渲染内容时,MediaWiki会将维基文本转换为HTML,从而允许宏的扩展以包含更多内容。维基百科页面的HTML版本通常比原始源维基文本包含更多信息。因此,任何希望分析维基百科内容(如读者所见)的人都会更愿意使用HTML而不是维基文本。传统上,只有在XML存档中提供了维基文本版本。现在,随着2021年企业HTML存档的引入,任何人都可以轻松访问和使用HTML存档(而且应该使用)。

然而,解析HTML以提取必要信息并不是一个简单的过程。一个不起眼的用户可能知道如何处理HTML,但他们可能不熟悉存档文件的特定格式。此外,MediaWiki API转换成的HTML有很多边缘情况,需要深入研究文档才能了解其结构。从HTML中识别功能并非易事!由于所有这些麻烦,个人可能会继续使用维基文本,因为已经存在针对它的优秀现成解析器(如mwparserfromhell)。因此,我们想编写一个Python库,可以有效地解析来自维基媒体企业存档的文章HTML代码,提取相关的元素,如文本、链接、模板等。这有望降低使用HTML存档的技术门槛,并赋予研究人员和其他人利用这一有益资源的能力。

特性

  • 迭代大型HTML存档tarball,而无需将它们提取到内存中(内存高效,但除非转换为列表,否则不可索引)
  • 提取主要文章元数据,如分类、模板、维基链接、外部链接、媒体、参考文献等,以及它们各自类型和状态信息
  • 轻松从HTML存档中提取文章内容,并自定义详细程度
  • 为存档中的文章生成汇总统计信息

安装

您可以使用pip安装mwparserfromhtml

$ pip install mwparserfromhtml

基本用法

查看example_notebook.ipynb以获取可运行的示例。

  • 从库中导入存档模块并加载存档
from mwparserfromhtml import HTMLDump

html_file_path = "TARGZ_FILE_PATH"
html_dump = HTMLDump(html_file_path)
  • 迭代存档中的文章
for article in html_dump:
    print(article.get_title())
  • 从存档中提取文章的纯文本,即移除任何非文本内容,如信息框、引用脚注或分类,并将链接替换为其锚文本
for article in html_dump:
    print(article.get_title())
    prev_heading = "_Lead"
    for heading, paragraph in article.html.wikistew.get_plaintext(exclude_transcluded_paragraphs=True,
                                                                  exclude_para_context=None,  # set to {"pre-first-para", "between-paras", "post-last-para"} for more conservative approach
                                                                  exclude_elements={"Heading", "Math", "Citation", "List", "Wikitable", "Reference"}):
        if heading != prev_heading:
            print(f"\n{heading}:")
            prev_heading = heading
        print(paragraph)
  • 从存档中提取模板、分类、维基链接、外部链接、媒体、参考文献等
for article in html_dump:
    print(article.html.wikistew.get_templates())
    print(article.html.wikistew.get_categories())
    print(article.html.wikistew.get_wikilinks())
    print(article.html.wikistew.get_externallinks())
    print(article.html.wikistew.get_images())
    print(article.html.wikistew.get_references())
  • 或者,您可以对独立的Parsoid HTML进行处理,例如来自API的,并将其转换为Article对象以提取功能
from mwparserfromhtml import Article
import requests

lang = "en"
title = "Both Sides, Now"
r = requests.get(f'https://{lang}.wikipedia.org/api/rest_v1/page/html/{title}')
article = Article(r.text)
print(f"Article Name: {article.get_title()}")
print(f"Abstract: {article.wikistew.get_first_paragraph()}")

项目信息

致谢

该项目于2022年5月至8月作为Outreachy实习项目启动。该项目从Earwig(mwparserfromhell)和Slavina Stefanova(mwsql)的工作中受益良多。

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

mwparserfromhtml-1.0.2.tar.gz (59.5 kB 查看哈希值)

上传时间

构建分布

mwparserfromhtml-1.0.2-py3-none-any.whl (56.3 kB 查看哈希值)

上传时间 Python 3

支持者