提取从*的XML所选文章的特定字符串转储
问题描述:
我已经下载并提取完整的*的XML转储(60+ GB,单独的XML文件)'enwiki-20170820-pages-articles-multistream.xml.bz2提取从*的XML所选文章的特定字符串转储
我感兴趣的标题和正文来自每一页。
我需要能够查找每个文本中的特定字符串,仅针对所选标题。
问题:
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等数据库进行查找?
答
如果您有任何Python使用经验,应该使用带有lxml解析器的beautifulsoup库来解析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/
正则表达式是解析XML的错误工具。使用XPath导航XML的各个部分(然后在您到达目标文本后可能返回正则表达式)。如果您真正想要根据源XML文件生成另一个XML文件,请使用XSLT。用什么来存储文本是一个设计问题,要回答将需要你陈述更多的约束和目标。然而,即使有这样的阐述,你的问题仍然是**这个网站太宽泛**。 – kjhughes