You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R语言officer包提取docx文档中的脚注内容?

提取docx文件中的脚注内容(基于R的officer包)

officer包的docx_summary()函数确实不会返回脚注内容,要提取脚注,需要直接操作docx文件底层的XML结构(docx本质是压缩包,脚注存储在word/footnotes.xml中),结合xml2包可以实现,具体步骤如下:

基础脚注提取

library(officer)
library(xml2)

# 读取目标docx文件
doc <- read_docx("你的文件路径.docx")

# 获取officer临时解压的docx目录路径
docx_temp_dir <- doc$doc_obj$package_dir

# 读取存储脚注的XML文件
footnotes_xml <- read_xml(file.path(docx_temp_dir, "word/footnotes.xml"))

# 提取脚注文本(排除docx默认的空脚注节点)
footnotes_content <- xml_text(
  xml_find_all(footnotes_xml, "//w:footnote[not(@w:id='0')]/w:p/w:r/w:t")
)

# 转换为数据框便于查看和后续处理
footnotes_df <- data.frame(
  脚注序号 = seq_along(footnotes_content),
  脚注内容 = footnotes_content,
  stringsAsFactors = FALSE
)

关联正文脚注引用与脚注内容

如果需要把正文中的脚注标记和对应的脚注内容关联起来,可以增加以下代码:

# 读取正文的XML文件
body_xml <- read_xml(file.path(docx_temp_dir, "word/document.xml"))

# 提取正文中的脚注引用标记及所属段落文本
footnote_refs <- xml_find_all(body_xml, "//w:r/w:footnoteReference")
ref_ids <- xml_attr(footnote_refs, "w:id")
ref_paragraphs <- xml_text(xml_find_first(footnote_refs, "./ancestor::w:p/w:r/w:t"))

# 构建引用数据框并与脚注内容合并
ref_df <- data.frame(
  引用脚注ID = ref_ids,
  引用所在段落 = ref_paragraphs,
  stringsAsFactors = FALSE
)

merged_footnotes <- merge(
  ref_df, footnotes_df,
  by.x = "引用脚注ID", by.y = "脚注序号",
  all.x = TRUE
)

说明

  • docx文件默认会包含一个ID为0的空脚注节点,所以用not(@w:id='0')过滤掉它。
  • 依赖xml2包解析XML,需要提前安装(install.packages("xml2"))。

内容的提问来源于stack exchange,提问作者LocusClassicus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:35:19