最近我想處理維基百科數據。在那種情況下,我下載了它的en-lang XML轉儲。 它已經超過44GB。我認爲我會用XmlSlurper解析它,根據文檔,它足以解析大型XML文件。不幸的是我得到了一些「內存不足的例外」。有什麼方法(使用現有的庫)在Groovy解析該「怪物文件」?解析Groovy中的維基百科xml轉儲
0
A
回答
0
XmlSlurper
確實在封面下使用了SAX解析器,但它將數據加載到內部模型中,因此不適合解析真正的大文件。
我相信你會需要使用native SAX parser,還是其他什麼東西取決於你(XSLT?)用例
0
你需要找到一個工具,可以以流方式處理XML,而比在存儲器中將整個事物加載到樹模型中更加容易。您可以使用SAX(您將代碼編寫爲事件處理程序方法,然後解析器在通過文檔時調用它)或StAX(從解析器「拉」事件而不是讓解析器將它們「推」到你),但另一種選擇是使用像XOM一個模型,可以在一種「半流」模式運行,讓您的樹模型只是一個<page>
轉儲在一個時間:
import nu.xom.*
class PageHandler extends NodeFactory {
private Nodes EMPTY = new Nodes()
Closure handler
public Nodes finishMakingElement(Element e) {
if(e.localName == 'page') {
handler.call(e)
return EMPTY
} else {
return super.finishMakingElement(e)
}
}
}
// call it as
new Builder(new PageHandler(handler:{ page ->
def latestRevText =
page.getFirstChildElement('revision').getFirstChildElement('text').value
// ...
})).build(fileOrInputStreamOrReader)
您可以對其他一些庫進行類似的處理,例如Dom4J。
相關問題
- 1. 解析XML維基百科
- 2. 解析維基百科轉儲
- 3. 解析維基百科轉儲(.xml文件)
- 4. 解析維基百科XML和Java
- 5. 解析維基百科類
- 6. 維基百科解析器
- 7. 如何解析維基百科轉儲以創建鏈接圖?
- 8. 解析出維基百科的IPAc
- 9. Lucene的維基百科轉儲
- 10. 解析維基百科Pagelink數據集
- 11. 解析維基百科頁表問題
- 12. 解析維基百科介紹PHP
- 13. 刮和解析維基百科頁面
- 14. python3解析和維基百科頁面
- 15. 多數據轉儲維基百科
- 16. 使用大* .bz2(維基百科轉儲)
- 17. 維基百科轉儲文件
- 18. 導入維基百科轉儲到MySql
- 19. 處理維基百科轉儲文件
- 20. 在MySQL中導入非英文維基百科XML轉儲?
- 21. 從維基百科XML轉儲中獲取靜態HTML文件
- 22. 解析XML維基轉儲ver0.4剛韌
- 23. 過濾維基百科的XML轉儲:某些口音錯誤
- 24. Spark Scala無法解析維基百科數據:enwiki_latest_articles xml bz2
- 25. 從維基百科獲取文章XML轉儲 - 通過標題
- 26. 從維基百科XML提取錶轉儲
- 27. 將維基百科轉儲解析爲保存結構(部分)的純文本
- 28. 瞭解維基百科標題轉儲格式
- 29. 維基百科API
- 30. 從目錄中的文件解析出維基百科標記