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

基于R语言提取议会演讲中政客姓名后的目标文本

议会演讲文本提取解决方案

原代码的问题

你之前的正则逻辑有两个核心问题:

  • 用[A-Z]{3,}当终止符,会把文本里的大写缩写、专业术语误判成政客姓名
  • 没考虑到政客姓名是多词全大写的结构,匹配范围太窄,抓不全目标片段

修正后的完整代码

library(dplyr)
library(stringr)
library(purrr) # 需要用到map2_chr

df <- data.frame(name_surname = c("ROCCO BUTTIGLIONE", "ELVIRA SAVINO", "DONATELLA AGOSTINELLI"),
                 text_col = c("ELVIRA SAVINO. Lorem ipsum. Lorem ipsum. ROCCO BUTTIGLIONE, dolor sit. ELVIRA SAVINO. amet. ROSARIA BINDI. consectetur adipiscing", 
                              "ELVIRA SAVINO. Lorem ipsum. Lorem ipsum. ROCCO BUTTIGLIONE, dolor sit. ELVIRA SAVINO. amet. ROSARIA BINDI. consectetur adipiscing",
                              "DONATELLA AGOSTINELLI. Chiedo di parlare. PRESIDENTE. Ne ha facoltà, sempre per due minuti. DONATELLA AGOSTINELLI. Signora Presidente, 
                              anche io intervengo per una sollecitazione della risposta ad una interrogazione presentata, a cui ancora non abbiamo ricevuto risposta. 
                              Con atto n. 4-00324 del 29 aprile 2013, la sottoscritta ha chiesto. PRESIDENTE. La ringrazio."), 
                 stringsAsFactors = FALSE)

df %>%
  mutate(
    text_match = map2_chr(name_surname, text_col, function(target_name, full_text) {
      # 把姓名里的空格转义,避免正则报错
      escaped_name <- str_replace_all(target_name, "\\s", "\\\\s")
      # 正则核心:匹配目标姓名后的内容,直到下一个全大写姓名(单/多词)或PRESIDENTE,或文本结尾
      match_pattern <- str_c(
        "(?<=", escaped_name, "[.,]?\\s)",  # 正向预查:目标姓名+可选标点+空格
        "(.*?)",                            # 非贪婪匹配中间文本
        "(?=\\s*([A-Z]+(\\s[A-Z]+)*)[.,]|$)" # 正向预查终止:下一个全大写姓名+标点,或文本结束
      )
      # 提取所有匹配片段,合并后清理多余空格
      matched_text <- str_extract_all(full_text, match_pattern)[[1]]
      str_squish(str_c(matched_text, collapse = " "))
    })
  )

关键逻辑说明

  • 正则精准匹配:专门针对「全大写多词姓名」做了匹配规则,同时兼容PRESIDENTE这类单词头衔,不会误抓普通大写内容
  • 逐行处理:用map2_chr逐个对应每行的姓名和文本,确保每一行都用自己的目标姓名去匹配
  • 结果清理:str_squish自动去掉文本里的多余换行、空格,输出干净的内容

最终输出示例

  • 第一行(ROCCO BUTTIGLIONE):dolor sit.
  • 第二行(ELVIRA SAVINO):Lorem ipsum. Lorem ipsum. amet.
  • 第三行(DONATELLA AGOSTINELLI):Chiedo di parlare. Signora Presidente, anche io intervengo per una sollecitazione della risposta ad una interrogazione presentata, a cui ancora non abbiamo ricevuto risposta. Con atto n. 4-00324 del 29 aprile 2013, la sottoscritta ha chiesto.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:43:23