2017-10-08 66 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/