如何在R中将德国议会辩论XML解析为含发言人信息的DataFrame?
R语言解析德国议会辩论XML并整合数据到DataFrame
核心思路
把提取到的各个字段(演讲ID、发言人ID、姓名、演讲内容)分别整理为向量,再直接组合成DataFrame即可。下面是基于xml2包的完整示例(假设你已经完成XML文档的解析和<rede>节点的提取):
代码实现
- 加载依赖包(未安装先运行
install.packages(c("xml2", "dplyr")))
library(xml2) library(dplyr) # 可选,简化数据操作
- 提取各字段向量
假设你已经通过xml_read_file()解析了XML文档并得到doc,且获取了所有<rede>节点:
# 获取所有演讲节点 rede_nodes <- xml_find_all(doc, "//rede") # 提取演讲ID(假设rede节点有id属性) rede_ids <- xml_attr(rede_nodes, "id") # 提取发言人ID(假设redner节点有id属性) speaker_ids <- xml_find_first(rede_nodes, ".//redner") %>% xml_attr("id", default = "无ID") # 提取发言人姓名 speaker_names <- xml_find_first(rede_nodes, ".//redner/name") %>% xml_text(default = "未知发言人") # 提取并合并演讲内容(合并所有<p>标签内的文本) speech_texts <- lapply(rede_nodes, function(node) { xml_find_all(node, ".//p") %>% xml_text() %>% paste(collapse = " ") }) %>% unlist()
- 整合为DataFrame
speech_df <- data.frame( 演讲ID = rede_ids, 发言人ID = speaker_ids, 发言人姓名 = speaker_names, 演讲内容 = speech_texts, stringsAsFactors = FALSE )
- 输出要求的结果
# 输出演讲总数 cat("演讲总数:", nrow(speech_df), "\n") # 输出第一篇演讲内容 cat("第一篇演讲内容:\n", speech_df$演讲内容[1], "\n")
注意事项
- 如果XML结构和示例不同,需要调整XPath路径(比如
<rede>下的内容标签不是<p>,就把.//p改成对应标签) - 用
xml_text(default = "...")可以避免因节点缺失导致的报错 - 如果演讲内容包含特殊字符,
xml_text()会自动处理,无需额外转义
内容的提问来源于stack exchange,提问作者tetristiger
相关产品推荐
相关产品推荐

