最近我想处理维基百科数据。在那种情况下,我下载了它的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. 从目录中的文件解析出维基百科标记