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

如何合并含相似关键词的行并求和?基于Quanteda文本挖掘数据

解决方案

假设你的kwic输出数据集名为kwic_df,包含docname、keyword、my_dict、n(词频计数)字段,以下是实现需求的代码:

1. 过滤climate_change子类别并分组求和

先筛选出my_dict为climate_change的数据,再对目标关键词分组并计算总词频:

library(dplyr)
library(stringr)
library(tidyr)

# 筛选子类别+添加分组标识
df_climate <- kwic_df %>%
  filter(my_dict == "climate_change") %>%
  mutate(
    group = case_when(
      # 精准匹配1.5、1.5 degree、1.5 degrees,排除1.55这类无关项
      str_detect(keyword, "^1\\.5( degree[s]?)?$") ~ "1.5_degree_group",
      # 匹配所有以climate或climate-开头的关键词
      str_detect(keyword, "^climate(-.*)?$") ~ "climate_base_group",
      # 其他关键词保留原名称作为分组
      TRUE ~ keyword
    )
  ) %>%
  # 按文档、字典类别、分组求和词频
  group_by(docname, my_dict, group) %>%
  summarise(total_n = sum(n), .groups = "drop")

2. 转换为宽表格式并计算类别总词频

使用pivot_wider完成长表转宽表,同时计算每个字典类别的整体词频:

# 转成指定宽表格式,无匹配的词频填0
wide_df <- df_climate %>%
  pivot_wider(
    id_cols = c(docname, my_dict),
    names_from = group,
    values_from = total_n,
    values_fill = 0
  )

# 计算climate_change子类别的各分组总词频
category_total <- wide_df %>%
  group_by(my_dict) %>%
  summarise(across(-docname, sum), .groups = "drop")

关键细节说明

  • 正则^1\\.5( degree[s]?)?$通过锚定开头结尾,确保只匹配目标1.5相关关键词,自动排除1.55、1.56这类无关项;
  • 正则^climate(-.*)?$覆盖所有以climate或climate-开头的变体(如climate crisis、climate-action等);
  • 若不需要保留其他未分组的关键词,可删除case_when中的TRUE ~ keyword行,仅保留前两组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:10:01