2017-10-08 65 views
-1

问题:

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等数据库进行查找?

+1

正则表达式是解析XML的错误工具。使用XPath导航XML的各个部分(然后在您到达目标文本后可能返回正则表达式)。如果您真正想要根据源XML文件生成另一个XML文件,请使用XSLT。用什么来存储文本是一个设计问题,要回答将需要你陈述更多的约束和目标。然而,即使有这样的阐述,你的问题仍然是**这个网站太宽泛**。 – kjhughes

回答

0

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