R文本挖掘:如何绘制关键词10词范围内词关联的图4.4?
实现关键词10词范围内的共现词可视化(类似图4.4)
核心思路
图4.4基于紧邻二元组(bigrams)做可视化,要扩展到10词范围内的共现,需先提取目标关键词前后10个词范围内的所有词,统计它们与关键词的共现频次后,再复刻类似的可视化样式。
步骤分解
步骤1:拆分文本并标记词位置
先把文本拆分为单个词,同时记录每个词的位置索引,方便后续定位关键词的上下文:library(tidytext) library(dplyr) library(tidyr) library(ggplot2) # 假设你的数据框为text_df,包含text列存储待分析文本 tokenized_data <- text_df %>% mutate(line_id = row_number()) %>% unnest_tokens(word, text) %>% mutate(word_pos = row_number()) # 全局词位置,若需按句子/段落统计,可改为按行内计数步骤2:定位关键词并提取上下文词
找到所有“sir”出现的位置,筛选出这些位置±10范围内的词,排除“sir”本身后,标记每个词所属的关键词上下文组:# 获取所有"sir"的位置 sir_locations <- tokenized_data %>% filter(word == "sir") %>% pull(word_pos) # 提取每个"sir"周围10词内的词 sir_context <- tokenized_data %>% filter(word_pos %in% unlist(lapply(sir_locations, function(x) (x-10):(x+10)))) %>% filter(word != "sir") %>% mutate(context_group = findInterval(word_pos, sir_locations)) # 标记属于哪个"sir"的上下文步骤3:统计共现频次
按上下文组去重(避免同一语境下重复计数),统计每个词与“sir”的共现次数:cooccur_counts <- sir_context %>% distinct(context_group, word) %>% count(word, sort = TRUE)步骤4:绘制可视化图
参考图4.4的水平条形图风格,展示高频共现词:cooccur_counts %>% top_n(20) %>% # 取前20个高频词,可按需调整 mutate(word = reorder(word, n)) %>% ggplot(aes(x = n, y = word)) + geom_col(fill = "#2c3e50") + labs(x = "与'sir'在10词范围内的共现次数", y = NULL) + theme_minimal()
注意事项
- 若文本按段落/句子划分,建议按行内位置计算词的索引,避免跨段落的无效共现。
- 如需区分词出现在“sir”之前还是之后,可在筛选时添加位置判断逻辑,拆分统计后分别可视化。
- 可通过调整
(x-10):(x+10)中的数值,灵活修改共现范围。
内容的提问来源于stack exchange,提问作者user3390169
相关产品推荐
相关产品推荐

