2010-05-20 54 views
3

我想解析這個龐大的25GB加維基百科XML文件。任何將有助於解決方案,將不勝感激。最好是Java中的解決方案。有沒有一種解決方案來解析Java中的wikipedia xml轉儲文件?

+0

我認爲你需要更具體一點。你是否試圖將它作爲DOM加載到內存中?您是否嘗試提取某些元素或屬性? – 2010-05-20 09:39:06

+0

究竟是什麼問題? – fish 2010-05-20 10:45:12

+0

使用擴展vtd-xml是最優雅的解決方案。 – 2011-01-01 00:58:09

回答

4

Ofcourse有可能解析與Java巨大的XML文件,但你應該使用正確的XML解析器 - 例如SAX解析器的元素處理的數據元素,而不是它試圖加載整個DOM解析器將文件存入內存。

因爲你的問題非常普遍而膚淺,所以你不可能給你一個完整的解決方案 - 你想要對數據做什麼?

1

如果您不打算在該xml中編寫或更改任何內容,請考慮使用SAX。它一次只在內存中保存一個節點(而不是DOM,它試圖在內存中構建整個樹)。

7

解析維基百科XML轉儲的Java API:WikiXMLJ(上次更新時間爲2010年11月)。
此外,還有活着的mirror maven與一些錯誤修復兼容。

+0

這個項目似乎已經在2010年底左右去世了。有誰知道它是否移動到其他地方? – 2012-11-09 18:09:12

+1

@NicholasTolleyCottrell看看我的編輯 – cubanacan 2012-11-13 14:36:35

1

我會用StAX,因爲它提供比SAX更好的靈活性(也是不錯的選擇)。

2

是的,沒錯。不要使用DOM。如果你只想讀取少量的數據,並想存儲在你自己的POJO中,那麼你也可以使用XSLT轉換。

將數據轉換爲XML格式,然後使用Castor/JAXB(XML to ojbect庫)將其轉換爲POJO。

請分享您如何解決問題,以便其他人可以有更好的方法。

謝謝。

---編輯---

請查看以下不同的解析器之間更好的比較的聯繫。看起來STAX更好,因爲它可以控制解析器,並在需要時從解析器中提取數據。

http://java.sun.com/webservices/docs/1.6/tutorial/doc/SJSXP2.html

http://tutorials.jenkov.com/java-xml/sax-vs-stax.html

0

有一個分析維基百科轉儲到XML和純文本的獨立應用程序,叫做Wiki Parser

原則上,您可以解析Wikipedia轉儲,然後使用Java以XML或純文本的方式執行任何您需要的操作。

這樣做的好處是,WikiParser速度非常快,只需2-3小時即可解析所有當前的英文維基百科文章。

0

前幾天我有這個問題,我發現由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,我認爲做管道,你可能需要的一部分。 隨時看看代碼

相關問題