使用stringr简化Tweet文本清洗及emoji留存的技术咨询
推特文本清洗与情感分析流程优化指南
一、clean_tweets函数运行问题修复
原函数存在两个核心错误:换行符转义符冗余、标点移除规则会误删emoji,修复后的函数可正常运行且满足emoji留存需求:
library(dplyr) library(stringr) clean_tweets <- function(x) { x %>% # 移除所有URL链接 str_remove_all("https?://\\S+|www\\.\\S+") %>% # 替换HTML特殊实体 str_replace_all("&", "and") %>% # 移除转发RT标记 str_remove_all("^RT:? ") %>% # 移除@用户提及 str_remove_all("@[[:alnum:]_]+") %>% # 移除#话题标签 str_remove_all("#[[:alnum:]_]+") %>% # 移除标点、数字,保留英文字母、空格、emoji str_remove_all("[^[:alpha:]\\s\\p{Emoji}]") %>% # 替换换行符为空格 str_replace_all("\\n", " ") %>% str_to_lower() %>% # 去除首尾和中间多余空白 str_squish() }
可直接按照你预期的方式调用:
tweetsClean <- df %>% mutate(clean_text = clean_tweets(text))
二、emoji统计流程适配
修复后的清洗函数已经完整保留了emoji,仅需将你现有代码的提取字段改为清洗后的文本即可正常运行:
library(emo) library(tidyr) TopEmoji <- tweetsClean %>% mutate(emoji = ji_extract_all(clean_text)) %>% unnest(cols = c(emoji)) %>% count(emoji, sort = TRUE) %>% top_n(5)
三、后续情感分析流程优化
原有流程存在两个可优化点:分词未使用清洗后文本、同时内连接两个情感词典会丢失仅匹配到单个词典的词,优化后代码如下:
library(tidytext) # 分词与停用词过滤 tweets_token <- tweetsClean %>% # 添加行号、保留所需字段 select(linenumber = row_number(), created_at, clean_text) %>% # 基于清洗后的文本分词 unnest_tokens(word, clean_text) %>% # 过滤停用词 anti_join(stop_words, by = "word") # 加载情感词典并统一格式 sentiment_bing <- get_sentiments("bing") %>% mutate(bing_value = ifelse(sentiment == "positive", 1, -1)) sentiment_afinn <- get_sentiments("afinn") %>% rename(afinn_value = value) # 情感值计算 tweetsValue <- tweets_token %>% # 左连接避免丢失匹配项 left_join(sentiment_bing, by = "word") %>% left_join(sentiment_afinn, by = "word") %>% group_by(linenumber, created_at) %>% summarise( bing_total = sum(bing_value, na.rm = TRUE), afinn_total = sum(afinn_value, na.rm = TRUE), .groups = "drop" )
四、运行注意事项
- 提前安装加载所有依赖包:
dplyr、stringr、tidyr、tidytext、emo - 按顺序运行测试数据集定义、文本清洗、emoji统计、分词、情感计算步骤即可
内容的提问来源于stack exchange,提问作者k3r0
相关产品推荐
相关产品推荐

