2014年3月28日 星期五

XML 與 Python

每種程式語言都可以處理XML(eXtensible Markup Language),曾經疑惑為何在 NLP 領域,大家都使用 XML 而不使用 JSON,說實在 JSON 比較好處理啊 ...

然後就有強者說,「因為 XML 的結構比較多元,可以容納比較多資訊!」,確實有道理。換句話說,就是 XML 比較肥 ... 吧!

最近參加一個 Sentiment Analysis 的比賽,官方釋出的 dataset 也都是 XML。當然要使用一下 Python 這個後起之秀,想都沒想就套曾經用過的 xml.dom.minidom ,結果就跑好久......於是我就 Google 了「Python XML 效率」。

這才知道,原來這方法只適合比較小的 XML , > 1GB 的 XML 根本跑不動,所以就改用 lxml 啦!

假設要處理的是 test.xml
 

 
  abc
 

  efg
 
 
  hij
 

那用下面的範例的做
#-*- coding: utf8 -*-

import io
import lxml.etree as ET

content = open('test.xml', 'r').read()
contentBuffer = io.BytesIO(content)
context = ET.iterparse(contentBuffer, tag='sentence')

for event, element in context:
 print element.findtext('text').encode('utf8')

只要這樣做便能印出
abc
efg
hij

這個方法最大的好處就是,省時間,而且不會佔用太大的內存,處理大量資料的XML時很適合使用,如果想知道更多關於 lxml ,請至他們官網!

沒有留言:

張貼留言