gpt4 book ai didi

r - 如何在 R 中读取大型(~20 GB)xml 文件?

转载 作者:行者123 更新时间:2023-12-04 14:57:44 24 4
gpt4 key购买 nike

我想从大型 xml 文件(20 GB)中读取数据并对其进行操作。我厌倦了使用“xmlParse()”,但它在加载之前给了我内存问题。有什么有效的方法可以做到这一点吗?

我的数据转储看起来像这样,

<tags>                                                                                                    
<row Id="106929" TagName="moto-360" Count="1"/>
<row Id="106930" TagName="n1ql" Count="1"/>
<row Id="106931" TagName="fable" Count="1" ExcerptPostId="25824355" WikiPostId="25824354"/>
<row Id="106932" TagName="deeplearning4j" Count="1"/>
<row Id="106933" TagName="pystache" Count="1"/>
<row Id="106934" TagName="jitter" Count="1"/>
<row Id="106935" TagName="klein-mvc" Count="1"/>
</tags>

最佳答案

在 XML 包中 xmlEventParse函数实现 SAX(读取 XML 并调用函数处理程序)。如果您的 XML 足够简单(在一个根元素内重复元素),您可以使用 branches为每个元素定义函数的参数。

例子:

MedlineCitation = function(x, ...) {
#This is a "branch" function
#x is a XML node - everything inside element <MedlineCitation>
# find element <ArticleTitle> inside and print it:
ns <- getNodeSet(x,path = "//ArticleTitle")
value <- xmlValue(ns[[1]])
print(value)
}

调用 XML 解析:
xmlEventParse(
file = "http://www.nlm.nih.gov/databases/dtd/medsamp2015.xml",
handlers = NULL,
branches = list(MedlineCitation = MedlineCitation)
)

关闭解决方案:

就像马丁·摩根一样, Storing-specific-xml-node-values-with-rs-xmleventparse :
branchFunction <- function() {
store <- new.env()
func <- function(x, ...) {
ns <- getNodeSet(x, path = "//ArticleTitle")
value <- xmlValue(ns[[1]])
print(value)
# if storing something ...
# store[[some_key]] <- some_value
}
getStore <- function() { as.list(store) }
list(MedlineCitation = func, getStore=getStore)
}

myfunctions <- branchFunction()

xmlEventParse(
file = "medsamp2015.xml",
handlers = NULL,
branches = myfunctions
)

#to see what is inside
myfunctions$getStore()

关于r - 如何在 R 中读取大型(~20 GB)xml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28667856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com