使用R提取无元数据PDF文件标题的问题求助
解决PDF标题提取问题
原代码的问题:
- 仅处理文本的第一行(
text[1]),无法覆盖标题占1-3行的场景; - 正则表达式
^(\\s*)([A-Z\\s]+)\\s+.*会在遇到第一个非大写/非空格字符时停止匹配,若标题行内有连续空格或后续内容混入大写字符,会导致提取不完整。
- 仅处理文本的第一行(
修正后的方案:
先筛选出开头连续的全大写行(最多3行),再合并并清理多余空格:
# 假设text是从PDF提取的每行文本向量(如pdftools::pdf_text()拆分后) # 定义函数判断是否为标题行:去除首尾空格后仅含大写字母和空格 is_title_line <- function(line) { trimmed <- trimws(line) nchar(trimmed) == 0 || grepl("^[A-Z\\s]+$", trimmed) } # 提取开头连续的标题行(最多3行),过滤空行 title_lines <- text[sapply(text, is_title_line)][1:3] title_lines <- title_lines[nchar(trimws(title_lines)) > 0] # 合并标题行并清理多余空格 titulo <- gsub("\\s+", " ", paste(title_lines, collapse = " ")) titulo <- trimws(titulo)
- 补充说明:
如果标题中包含标点(如连字符、逗号等),可以修改正则表达式的匹配规则,比如将^[A-Z\\s]+$改为^[A-Z\\s\\-\\.,:;!?]+$,覆盖常见标题标点。
内容的提问来源于stack exchange,提问作者Lucas Reydô
相关产品推荐
相关产品推荐

