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

求助:在R中提取目标词前后10个词用于情感分析

提取目标词前后10词上下文的R解决方案

针对你的需求,这里提供两种实用的R实现方法,分别适配不同场景:

方法一:正则表达式快速提取上下文字符串

适合快速获取包含目标词的前后10词片段,无需提前分词:

# 加载所需包
library(dplyr)
library(stringr)

# 定义目标词向量
target_words <- c("jesus", "mary", "christ", "magdelene")

# 构建匹配前后最多10个完整单词的正则模式
context_pattern <- paste0(
  "(?:\\b\\w+\\b\\s){0,10}",  # 前面0-10个词(含空格分隔)
  "\\b(", paste(target_words, collapse = "|"), ")\\b",  # 目标词(匹配完整单词)
  "(?:\\s\\b\\w+\\b){0,10}"   # 后面0-10个词(含空格分隔)
)

# 处理你的亚马逊评论数据框(假设数据框名为df,text列为评论内容)
context_df <- df %>%
  mutate(
    # 提取每条评论中所有匹配的上下文片段,返回列表
    contexts = str_extract_all(text, context_pattern, ignore.case = TRUE)
  ) %>%
  # 将列表展开为每行一个上下文片段
  tidyr::unnest(contexts) %>%
  # 提取当前上下文对应的目标词(方便后续分组分析)
  mutate(target_word = str_extract(contexts, paste0("\\b(", paste(target_words, collapse = "|"), ")\\b"), ignore.case = TRUE)) %>%
  # 统一目标词大小写(可选)
  mutate(target_word = tolower(target_word))

注意:ignore.case = TRUE 确保匹配不同大小写的目标词(比如"Jesus"或"JESUS"),如果不需要可以移除该参数。

方法二:分词+滑动窗口精准提取

适合需要对上下文的单个词做精细化处理(比如情感分析时逐个词计算得分)的场景:

# 加载所需包
library(dplyr)
library(tidytext)
library(tidyr)

# 定义目标词向量
target_words <- c("jesus", "mary", "christ", "magdelene")

# 1. 对评论进行分词,保留评论标识和词的位置
tokenized_df <- df %>%
  # 给每条评论生成唯一ID(如果已有ID列可替换row_number())
  mutate(comment_id = row_number()) %>%
  # 分词,自动转小写(如需保留大小写可设置to_lower = FALSE)
  unnest_tokens(word, text) %>%
  # 按评论分组,给每个词标记位置
  group_by(comment_id) %>%
  mutate(word_position = row_number()) %>%
  ungroup() %>%
  # 可选:过滤停用词(比如the/and等无意义词汇)
  filter(!word %in% stop_words$word)

# 2. 定位所有目标词的位置
target_positions <- tokenized_df %>%
  filter(word %in% target_words) %>%
  select(comment_id, target_word = word, target_position = word_position)

# 3. 提取每个目标词前后10个词的上下文
context_tokens <- target_positions %>%
  left_join(tokenized_df, by = "comment_id") %>%
  # 筛选位置在目标词前后10范围内的词
  filter(abs(word_position - target_position) <= 10) %>%
  # 按评论和目标词分组,拼接上下文为字符串(或保留单个词用于情感分析)
  group_by(comment_id, target_word) %>%
  summarize(
    context_text = str_c(word, collapse = " "),
    # 可选:保留单个词的列表,方便后续逐个词做情感分析
    context_words = list(word)
  ) %>%
  ungroup()

后续情感分析建议

得到上下文后,你可以直接用context_text列进行文本情感分析(比如用sentimentr包的sentiment()函数),或者用context_words列表对每个词单独打分后取平均值,结果会更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:24:29