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

如何用R读取带字体颜色等格式的Word文档并生成DataFrame?

提取DOCX带格式文本到R DataFrame方案

可以通过docxtractr结合xml2包直接解析DOCX的底层XML结构,精准提取文本及对应字体颜色、加粗、下划线等格式信息,满足你的需求。以下是具体操作步骤:

1. 安装依赖包

install.packages(c("docxtractr", "xml2", "dplyr", "stringr"))

2. 读取DOCX并加载XML结构

library(docxtractr)
library(xml2)
library(dplyr)
library(stringr)

# 替换为你的目标DOCX文件路径
doc <- read_docx("your_document.docx")
# 获取文档正文的XML节点
body_xml <- doc$doc_obj$body

3. 提取文本与对应格式信息

DOCX中同一格式的文本会被打包为一个<w:r>(格式块),我们遍历这些块提取内容和格式属性:

# 定位所有格式块节点
r_nodes <- xml_find_all(body_xml, ".//w:r")

# 遍历节点提取数据
text_format_df <- lapply(r_nodes, function(node) {
  # 提取文本内容
  text <- xml_find_first(node, ".//w:t") %>% xml_text()
  if (is.na(text)) text <- ""
  
  # 获取格式属性节点
  rpr <- xml_find_first(node, ".//w:rPr")
  
  # 判断是否加粗
  bold <- !is.na(xml_find_first(rpr, ".//w:b"))
  
  # 获取下划线类型(无下划线则标记为"none")
  underline <- if (!is.na(xml_find_first(rpr, ".//w:u"))) {
    xml_attr(xml_find_first(rpr, ".//w:u"), "val") %||% "single"
  } else {
    "none"
  }
  
  # 获取字体颜色十六进制码(默认自动颜色标记为"auto")
  font_color <- if (!is.na(xml_find_first(rpr, ".//w:color"))) {
    xml_attr(xml_find_first(rpr, ".//w:color"), "val")
  } else {
    "auto"
  }
  
  tibble(text = text, bold = bold, underline = underline, font_color = font_color)
}) %>% bind_rows()

# 过滤空文本行
text_format_df <- text_format_df %>% filter(str_trim(text) != "")

4. 可选:拆分到单个字符粒度

如果需要每个字符对应一行格式信息(标注字符位置的格式),可进一步处理:

char_format_df <- text_format_df %>%
  mutate(char = str_split(text, "")) %>%
  unnest(char) %>%
  select(char, bold, underline, font_color)

结果说明

  • text_format_df:每行是一段格式统一的文本,包含文本内容、加粗状态、下划线类型、字体颜色码。
  • char_format_df:将文本拆分为单个字符,每行对应一个字符的格式信息,满足按格式标注字符位置的需求。

注:officer包侧重DOCX文件生成,读取格式的能力有限;直接解析XML的方式能获取DOCX底层所有格式属性,更适配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:54:59