基于R语言tidytext挖掘构建评论文本Bigram网络图技术问询
解决CSV评论文本的Bigram网络图构建问题
我已经按照你参考的tidytext教程,成功搞定了CSV评论文本的Bigram网络图构建,下面是完整的可运行方案:
完整实现代码
# 加载所需的R包 library(dplyr) library(tidyr) library(tidytext) library(ggplot2) library(igraph) library(ggraph) library(stringr) # 读取CSV数据集(会弹出文件选择窗口,直接选中你的评论文件即可) kjv <- read.csv(file.choose()) # 定义用于统计Bigram的函数 count_bigrams <- function(dataset, text_col) { dataset %>% # 将文本拆分为双词组合(Bigram) unnest_tokens(bigram, {{text_col}}, token = "ngrams", n = 2) %>% # 拆分Bigram为两个独立词汇 separate(bigram, c("word1", "word2"), sep = " ") %>% # 过滤掉停用词(比如无意义的虚词) filter(!word1 %in% stop_words$word, !word2 %in% stop_words$word) %>% # 统计每个Bigram的出现次数并按频次排序 count(word1, word2, sort = TRUE) } # 统计评论文本中的Bigram(这里假设你的评论文本列名为`comment`,记得根据实际列名修改) bigram_counts <- count_bigrams(kjv, comment) # 构建网络图对象,过滤掉出现次数过少的Bigram(示例保留≥5次的,可按需调整阈值) bigram_graph <- bigram_counts %>% filter(n >= 5) %>% graph_from_data_frame() # 绘制Bigram网络图 set.seed(2024) # 设置随机种子,保证每次生成的图布局一致 ggraph(bigram_graph, layout = "fr") + geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour = "darkred") + geom_node_point(size = 5, colour = "steelblue") + geom_node_text(aes(label = name), repel = TRUE, size = 4, colour = "black") + theme_void()
关键步骤说明
- 包加载:确保所有依赖包都已安装(如果没装,用
install.packages(c("dplyr", "tidytext", "igraph", "ggraph"))安装) - 数据读取:用
file.choose()交互式选文件更灵活,也可以直接写死文件路径(比如read.csv("你的评论文件路径.csv")) - Bigram处理:自定义函数自动完成分词、停用词过滤和频次统计,省去重复代码
- 网络图构建:通过频次过滤可以避免图太杂乱,阈值根据你的数据集大小调整就行
- 可视化优化:用透明度和宽度区分Bigram的频次,节点文本自动防重叠,让图更易读
内容的提问来源于stack exchange,提问作者user709413
相关产品推荐
相关产品推荐

