我想解析這個龐大的25GB加維基百科XML文件。任何將有助於解決方案,將不勝感激。最好是Java中的解決方案。有沒有一種解決方案來解析Java中的wikipedia xml轉儲文件?
回答
Ofcourse有可能解析與Java巨大的XML文件,但你應該使用正確的XML解析器 - 例如SAX解析器的元素處理的數據元素,而不是它試圖加載整個DOM解析器將文件存入內存。
因爲你的問題非常普遍而膚淺,所以你不可能給你一個完整的解決方案 - 你想要對數據做什麼?
如果您不打算在該xml中編寫或更改任何內容,請考慮使用SAX。它一次只在內存中保存一個節點(而不是DOM,它試圖在內存中構建整個樹)。
我會用StAX,因爲它提供比SAX更好的靈活性(也是不錯的選擇)。
是的,沒錯。不要使用DOM。如果你只想讀取少量的數據,並想存儲在你自己的POJO中,那麼你也可以使用XSLT轉換。
將數據轉換爲XML格式,然後使用Castor/JAXB(XML to ojbect庫)將其轉換爲POJO。
請分享您如何解決問題,以便其他人可以有更好的方法。
謝謝。
---編輯---
請查看以下不同的解析器之間更好的比較的聯繫。看起來STAX更好,因爲它可以控制解析器,並在需要時從解析器中提取數據。
http://java.sun.com/webservices/docs/1.6/tutorial/doc/SJSXP2.html
這是一個積極的Java項目可用於解析XML維基百科轉儲文件:
http://code.google.com/p/gwtwiki/。有改造維基百科的XML內容轉換成HTML,PDF,文本Java程序的例子很多,...:http://code.google.com/p/gwtwiki/wiki/MediaWikiDumpSupport
馬西
有一個分析維基百科轉儲到XML和純文本的獨立應用程序,叫做Wiki Parser 。
原則上,您可以解析Wikipedia轉儲,然後使用Java以XML或純文本的方式執行任何您需要的操作。
這樣做的好處是,WikiParser速度非常快,只需2-3小時即可解析所有當前的英文維基百科文章。
前幾天我有這個問題,我發現由https://github.com/Stratio/wikipedia-parser提供的維基分析器做的工作。 他們流xml文件並以塊讀取它,然後您可以在回調中捕獲它。
這是我如何使用它Scala中的一個片段:
val parser = new XMLDumpParser(new BZip2CompressorInputStream(new BufferedInputStream(new FileInputStream(pathToWikipediaDump)), true))
parser.getContentHandler.setRevisionCallback(new RevisionCallback {
override def callback(revision: Revision): Unit = {
val page = revision.getPage
val title = page.getTitle
val articleText = revision.getText()
println(articleText)
}
它流維基百科,解析它,每次找到一個版本(文章),它會得到它的標題,正文和打印文章的文字。 :)
---編輯---
目前我的工作https://github.com/idio/wiki2vec,我認爲做管道,你可能需要的一部分。 隨時看看代碼
- 1. 有沒有解決方案來解決java 8中的JAVA致命錯誤?
- 2. 沒有解決方案來驗證在XSD Android中的XML
- 3. 有沒有一種方法來grep或解析一個變量
- 4. 有沒有更簡單的方法來解析Java中的Android?
- 5. 從一種解決方案調試到另一種解決方案
- 6. 有沒有人有一個簡單的解決方案來解析使用C++的Exp-Golomb代碼?
- 7. VIM:有沒有一種簡單的方法來管理Vim中的Visual Studio解決方案/ makefile項目?
- 8. 沒有javascript的優雅解決方案
- 9. 有沒有辦法「關閉」解決方案文件夾?
- 10. perl的XML轉換解決方案
- 11. 有沒有像Java休眠的C++持久性解決方案?
- 12. 有沒有一種方法可以簡化angular-ui-router解決方案?
- 13. 解析Java中沒有根的XML文件
- 14. 轉換文件的最佳文件解析解決方案是什麼?
- 15. 無法在另一種解決方案
- 16. 有沒有一種簡單的方法來檢測解決方案中的.NET 1.1依賴關係?
- 17. 解決方案沒有違反
- 18. 有沒有解決方案來控制重複屬性?
- 19. 這兩種解決方案哪一種更高效? (Java Hashset)
- 20. 有沒有解決方案將字符串轉換爲金額?
- 21. 現有的TCP中繼解決方案
- 22. 有沒有一個快速的解決方案來從Node.js查詢Lucene索引?
- 23. 沒有解決方案文件的TFS構建
- 24. Can Octave:解決線性系統有很多解決方案還是沒有解決方案?
- 25. 有沒有一種方法來解決IE 8中我的Rails javascript application.js?
- 26. 有沒有寫混合文檔和指南的解決方案?
- 27. 有沒有一種(簡單)的方法來解析Python中的CRL?
- 28. JSON解析正確的解決方案
- 29. SVN缺少修訂 - 有沒有人有解決方案
- 30. msbuild解決方案文件
我認爲你需要更具體一點。你是否試圖將它作爲DOM加載到內存中?您是否嘗試提取某些元素或屬性? – 2010-05-20 09:39:06
究竟是什麼問題? – fish 2010-05-20 10:45:12
使用擴展vtd-xml是最優雅的解決方案。 – 2011-01-01 00:58:09