有没有解决方案来解析Java中的wikipedia xml转储文件?

时间:2010-05-20 09:35:24

标签: java xml parsing

我正在尝试解析这个巨大的25GB Plus维基百科XML文件。任何有用的解决方案都将受到赞赏。最好是Java中的解决方案。

8 个答案:

答案 0 :(得分:7)

用于解析Wikipedia XML转储的Java API:WikiXMLJ(上次更新时间为2010年11月)。
此外,还有一些活着的mirror与maven兼容,并修复了一些错误。

答案 1 :(得分:4)

当然可以使用Java解析大量的XML文件,但是你应该使用正确的XML解析器 - 例如一个按元素处理数据元素的SAX解析器,而不是一个试图加载整个文档的DOM解析器进入记忆。

不可能给你一个完整的解决方案,因为你的问题非常笼统和肤浅 - 你究竟想对这些数据做些什么?

答案 2 :(得分:3)

这是一个活动的java项目,可用于解析wikipedia xml转储文件:
http://code.google.com/p/gwtwiki/。有很多java程序可以将维基百科xml内容转换为html,pdf,text,......:http://code.google.com/p/gwtwiki/wiki/MediaWikiDumpSupport

马西

答案 3 :(得分:2)

是的,对。不要使用DOM。如果您只想读取少量数据,并希望存储在自己的POJO中,那么您也可以使用XSLT转换。

将数据转换为XML格式,然后使用Castor / JAXB(XML到ojbect库)将其转换为某些POJO。

请分享您如何解决问题,以便其他人可以采取更好的方法。

感谢。

--- EDIt ---

检查以下链接,以便更好地比较不同的解析器。似乎STAX更好,因为它可以控制解析器,并在需要时从解析器中提取数据。

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

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

答案 4 :(得分:1)

如果您不打算在该xml中编写或更改任何内容,请考虑使用SAX。它一次在一个节点内存(而不是DOM,它试图在内存中构建整个树)。

答案 5 :(得分:1)

我会选择StAX,因为它提供了比SAX更多的灵活性(也是不错的选择)。

答案 6 :(得分:0)

有一个独立的应用程序可以将Wikipedia转储解析为XML和纯文本,称为Wiki Parser

原则上,您可以解析Wikipedia转储,然后使用Java通过XML或纯文本执行您需要的任何操作。

这样做的好处是WikiParser非常快,只需2-3个小时就可以解析所有当前的英文维基百科文章。

答案 7 :(得分:0)

前几天我遇到了这个问题,我发现https://github.com/Stratio/wikipedia-parser提供的wiki解析器完成了工作。 它们流式传输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,我认为这可能是您可能需要的管道的一部分。 随意看看代码