【问题标题】:Extract specific strings from selected articles in the Wikipedia XML Dump从 Wikipedia XML Dump 中的选定文章中提取特定字符串
【发布时间】:2018-03-20 00:05:15
【问题描述】:
  • 我已经下载并提取了完整的 Wikipedia XML 转储(60+ GB,单个 XML 文件)'enwiki-20170820-pages-articles-multistream.xml.bz2

  • 我对每一页的标题和文字都很感兴趣。

  • 我需要能够在每个文本中查找特定字符串,仅针对选定的标题。

问题:

1) 如何有效地清理 XML 文件?除了文本和标题字段之外,我想删除任何不相关的内容。

一个页面的例子可以是:

<page>
<title>Afrika</title>
<ns>0</ns>
<id>2</id>
<revision>
  <id>1428708</id>
  <parentid>1391377</parentid>
  <timestamp>2016-03-06T14:00:12Z</timestamp>
  <contributor>
    <username>SpesBona</username>
    <id>2720</id>
  </contributor>
  <comment>Uitgebrei</comment>
  <model>wikitext</model>
  <format>text/x-wiki</format>
  <text xml:space="preserve">
     '''Afrika''' is die wêreld se tweede grootste [[kontinent]] in sowel 
     oppervlakte as bevolking. Saam met die eilande beslaan dit ongeveer 
     30,221,532km² wat 20,3% van die totale landoppervlakte van die [[aarde]] 
     is en dit word bewoon deur meer as 1 miljard mense - ongeveer 'n sewende 
     van die wêreldbevolking. 
  </text>
</revision>

最好,我需要的唯一信息是:

<page>
   <title>Afrika</title>
   <text xml:space="preserve">
     '''Afrika''' is die wêreld se tweede grootste [[kontinent]] in sowel 
     oppervlakte as bevolking. Saam met die eilande beslaan dit ongeveer 
     30,221,532km² wat 20,3% van die totale landoppervlakte van die [[aarde]] 
     is en dit word bewoon deur meer as 1 miljard mense - ongeveer 'n sewende 
     van die wêreldbevolking. 
    </text>
 </page>

但是;我以前从未使用过 XML 或做过任何 XML 解析,所以我对如何处理这么大的文件有点迷茫。

我尝试过使用正则表达式,但我想知道是否有任何方法可以在 Python 中使用他们的任何 XML 处理模块来做到这一点?

2) 当必须搜索如此庞大的文本文件时,最佳的数据结构是什么?是否建议完全使用清理后的数据创建一个新文件,或者使用 MongoDB 之类的数据库进行查找?

【问题讨论】:

  • Regex 是解析 XML 的错误工具。使用 XPath 导航 XML 的各个部分(然后可能在到达目标文本后使用正则表达式)。如果您真正想要的是基于您的源 XML 文件生成另一个 XML 文件,请使用 XSLT。使用什么来存储文本是一个设计问题,要回答这个问题需要您陈述更多的约束和目标。但是,即使进行了这样的阐述,您的问题对于本网站来说仍然过于宽泛
  • Wikipedia text download的可能重复

标签: python regex xml xml-parsing elementtree


【解决方案1】:

使用此 Python 代码将存档转换为单个文本文件,Python 代码链接 "https://svn.code.sf.net/p/apertium/svn/trunk/apertium-tools/WikiExtractor.py"

用法:

python3 WikiExtractor.py --infn dump.xml.bz2

更多信息: http://wiki.apertium.org/wiki/Wikipedia_Extractor

或者您也可以从这里下载旧的维基百科档案作为文本:

http://kopiwiki.dsd.sztaki.hu/

【讨论】:

    【解决方案2】:

    如果你有任何 Python 经验,你应该使用 beautifulsoup 库和 lxml 解析器来解析 xml。它将让您非常轻松直观地浏览标签。 http://www2.hawaii.edu/~takebaya/cent110/xml_parse/xml_parse.html

    为了处理大数据量,您可以将每个页面分成不同的文件,并使用 glob 将它们加载到 Python 中,并一次解析一个文件。 Find all files in a directory with extension .txt in Python

    对于最终的数据结构,mongodb 听起来不错。如果要进行全文搜索,请记住建立文本索引。 https://docs.mongodb.com/manual/core/index-text/

    【讨论】:

    猜你喜欢
    • 2020-11-22
    • 2023-03-25
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2015-06-07
    相关资源
    最近更新 更多