从维基百科XML转储

时间:2017-10-08 19:36:56

标签: python regex xml xml-parsing elementtree

  • 我已下载并解压缩完整的维基百科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解析,因此我对如何使用这么大的文件感到有点迷失。

我尝试过使用正则表达式,但我想知道是否有任何方法可以使用任何XML处理模块在Python中执行此操作?

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

2 个答案:

答案 0 :(得分:0)

如果你有任何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/

答案 1 :(得分:0)

使用此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

或者您也可以从此处下载旧的Wikipedia存档作为文本:

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