R情感分析:解码文本中的情感

基于之前关于文本聚类和文本模型的博客,我们现在可以深入探讨一个经典主题 - 情感分析。情感分析通过计算方式识别和分类文本中的情感,帮助理解公众意见或消费者反馈。

什么是情感分析?

情感分析确定文本背后的情感基调,将其分类为积极、消极或中性。它被广泛用于社交媒体监控和理解消费者需求。

为什么使用情感分析?

  • 公众意见:评估对话题或品牌的情绪。
  • 消费者洞察:快速识别客户反应(例如,Expedia加拿大的商业案例)。

挑战

人类语言很复杂,机器在处理讽刺等细微差别时存在困难(例如,"太~~~~好了!!"可能被误读为积极)。算法正在不断发展以处理这些情况,但还不能达到100%的准确性。

情感分析流程

  1. 文本预处理
    • 分词:将文本分割成单词或短语。
    • 停用词过滤:删除常见词(如"和"、“的”)。
    • 否定处理:处理否定词(如"不好"与"不是不好")。
    • 词干提取:将词还原为词根形式(如"跑步"到"跑")。
  2. 情感分类:使用词典或算法分配极性(积极/消极)。
  3. 情感评分:量化情感强度,考虑大写等因素(如"GOOD"表示更强的情绪)。

示例数据

文本情感
喜欢悉尼的德国面包店…积极
@VivaLaLauren 我的也坏了!…消极
@Mofette 太棒了!愿原力与你同在…积极

R语言中的情感分析

使用R的tmsyuzhet和其他包,我们可以预处理文本并分析情感。

预处理和词云

library(tm)
library(SnowballC)
library(wordcloud)
library(RColorBrewer)# 用于情感分析的示例文本数据
text <- c("我绝对喜欢这个产品!它超出了我所有的期望,运行完美。","服务太差了。我从未对一次购买如此失望过。","这个还行。不是很好,但也不差。我想它能完成工作。","客服团队非常乐于助人,几分钟内就解决了我的问题。太棒了!","考虑到价格,质量相当差。根据评论我期望会更好。","这是我今年买过的最好的东西。每一分钱都值得!","我对发货延迟感到非常沮丧。产品很好,但等待时间让人无法接受。","说明不够清晰,但一旦我弄明白了,产品就如描述的那样工作。","我不会向任何人推荐这个。完全浪费金钱和时间。","设计很漂亮,使用非常方便。我对这次购买非常满意!"
)docs <- Corpus(VectorSource(text))
toSpace <- content_transformer(function(x, pattern) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeNumbers)
docs <- tm_map(docs, removeWords, stopwords("english"))
docs <- tm_map(docs, removePunctuation)
docs <- tm_map(docs, stripWhitespace)
docs <- tm_map(docs, stemDocument)# 创建词-文档矩阵
dtm <- TermDocumentMatrix(docs)
dtm_m <- as.matrix(dtm)
dtm_v <- sort(rowSums(dtm_m), decreasing=TRUE)
dtm_d <- data.frame(word = names(dtm_v), freq=dtm_v)# 生成词云,调整参数
# 设置图形边距(下、左、上、右)
par(mar = c(0, 0, 0, 0))  # 移除所有边距# 创建新图形,设置更大尺寸
png("wordcloud.png", width = 10, height = 8, units = "in", res = 300)  # 高分辨率set.seed(1234)
wordcloud(words = dtm_d$word, freq = dtm_d$freq, min.freq = 1,max.words = 50,random.order = FALSE, rot.per = 0,            # 不旋转scale = c(4, 0.8),      # 最大和最小词之间的比例colors = brewer.pal(8, "Dark2"),vfont = c("sans serif", "plain"),use.r.layout = TRUE     # 更好的布局算法
)dev.off()  # 关闭设备# 显示保存的图像
if (requireNamespace("png", quietly = TRUE) && requireNamespace("grid", quietly = TRUE)) {library(png)library(grid)if (file.exists("wordcloud.png")) {img <- png::readPNG("wordcloud.png")grid::grid.raster(img)} else {warning("未找到词云图像。请检查文件路径。")}
} else {warning("请安装'png'和'grid'包以显示词云。")
}

请添加图片描述

这段代码预处理文本,去除噪音,并在词云中可视化频繁出现的词。

情感评分

使用syuzhet进行不同词典的情感分析:

library(syuzhet)
library(ggplot2)# 使用多种方法进行情感评分
syuzhet_vector <- get_sentiment(text, method="syuzhet")
bing_vector <- get_sentiment(text, method="bing")
afinn_vector <- get_sentiment(text, method="afinn")# 比较前几个分数
rbind(sign(head(syuzhet_vector)),sign(head(bing_vector)),sign(head(afinn_vector))
)# 使用NRC进行情感分类
d <- get_nrc_sentiment(text)
td <- data.frame(t(d))
td_new <- data.frame(rowSums(td))
names(td_new) <- "count"
td_new <- cbind("sentiment" = rownames(td_new), td_new)# 创建更具信息量的图表
ggplot(td_new, aes(x = reorder(sentiment, count), y = count, fill = sentiment)) +geom_bar(stat = "identity") +theme_minimal() +theme(axis.text.x = element_text(angle = 45, hjust = 1),legend.position = "none") +  # 移除图例,因为它是多余的labs(title = "情感分析结果",x = "情感",y = "计数") +scale_fill_brewer(palette = "Set3") +coord_flip()  # 翻转坐标以获得更好的可读性# 创建多个可视化
# 1. 基本情感分数比较
sentiment_scores <- data.frame(Text = 1:length(text),Syuzhet = syuzhet_vector,Bing = bing_vector,Afinn = afinn_vector
)# 重塑数据以便绘图
sentiment_long <- tidyr::pivot_longer(sentiment_scores, cols = c(Syuzhet, Bing, Afinn),names_to = "Method",values_to = "Score")# 图表1:比较不同的情感评分方法
p1 <- ggplot(sentiment_long, aes(x = Text, y = Score, fill = Method)) +geom_bar(stat = "identity", position = "dodge") +theme_minimal() +labs(title = "情感评分方法比较",x = "文本样本",y = "情感分数") +scale_fill_brewer(palette = "Set2")# 图表2:NRC情感分析(上面已创建)
p2 <- ggplot(td_new, aes(x = reorder(sentiment, count), y = count, fill = sentiment)) +geom_bar(stat = "identity") +theme_minimal() +theme(axis.text.x = element_text(angle = 45, hjust = 1),legend.position = "none") +labs(title = "情感分析结果",x = "情感",y = "计数") +scale_fill_brewer(palette = "Set3") +coord_flip()# 图表3:词云(上面已创建)
# 词云已保存为"wordcloud.png"# 显示所有图表
print(p1)
print(p2)# 打印汇总统计
cat("\n情感分数汇总:\n")
print(summary(sentiment_scores[, -1]))# 打印最积极和最消极的文本
cat("\n最积极的文本:\n")
print(text[which.max(syuzhet_vector)])
cat("\n最消极的文本:\n")
print(text[which.min(syuzhet_vector)])

请添加图片描述

请添加图片描述


情感分数汇总:Syuzhet            Bing           Afinn      Min.   :-1.750   Min.   :-2.00   Min.   :-5.00  1st Qu.:-0.250   1st Qu.: 0.00   1st Qu.:-0.75  Median : 0.325   Median : 0.00   Median : 1.50  Mean   : 0.600   Mean   : 0.80   Mean   : 2.20  3rd Qu.: 1.738   3rd Qu.: 2.75   3rd Qu.: 5.75  Max.   : 3.150   Max.   : 4.00   Max.   :10.00  最积极的文本:
[1] "客服团队非常乐于助人,几分钟内就解决了我的问题。太棒了!"最消极的文本:
[1] "我对发货延迟感到非常沮丧。产品很好,但等待时间让人无法接受。"

这段代码使用syuzhetbingafinn词典进行情感评分,并使用NRC词典可视化情感(如喜悦、悲伤)。

基于词典的分析

bingafinn这样的词典为词分配情感分数:

  • Bing:二元(积极/消极,例如"放弃"=消极)。
  • Afinn:数值分数(例如"放弃"=-2)。
  • NRC:对情感进行分类(愤怒、喜悦等)。

示例:酒店情感分数

酒店Agoda情感Agoda评分Booking.com情感Booking.com评分
One World6.858.56.598.5
Summer Suite7.278.47.18.7

这些分数反映了评论的整体情感,通常与评分一致,但提供了更深层次的情感洞察。

结论

情感分析提供了一种强大的方式来理解文本中的情感,尽管由于语言的复杂性需要谨慎解释。使用R的tmsyuzhet包,你可以预处理文本、评分情感并可视化情绪,使其成为社交媒体或评论分析的理想工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85251.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云徙渠道订货系统:赋能企业渠道管理的数字化引擎

在当今商业竞争日益激烈的环境下&#xff0c;企业如何高效管理和优化渠道成为关键问题。云徙渠道订货系统凭借其强大的数字化能力&#xff0c;为企业提供了全新的渠道管理解决方案&#xff0c;助力企业在复杂多变的市场环境中保持竞争力。 从渠道管理的痛点出发 传统渠道管理方…

Nacos基础使用(二):nacos作为配置中心

一、Nacos 配置中心核心属性 在学习nacos 作为配置中心的使用之前&#xff0c;先看下Nacos 作为配置中心时的三个属性&#xff0c;即&#xff1a; 命名空间、配置分组、配置集ID&#xff08;习惯称为配置文件ID&#xff09;&#xff1b;在使用Nacos 作为配置中心 的过程中可以通…

SpringBoot 插件化架构的4种实现方案

在复杂业务场景下&#xff0c;传统的单体应用架构往往面临着功能扩展困难、代码耦合严重、迭代效率低下等问题。 插件化架构作为一种模块化设计思想的延伸&#xff0c;能够使系统具备更好的扩展性和灵活性&#xff0c;实现"热插拔"式的功能扩展。 本文将介绍Spring…

VGG-19(Visual Geometry Group)模型

VGG-19 是由牛津大学视觉几何组和 Google DeepMind 的研究人员在 2014 年提出的一个非常经典的深度卷积神经网络模型。 一 核心结构 &#xff08;1&#xff09;深度&#xff1a; 模型名称中的 "19" 指的是模型拥有 19 层带有权重的层&#xff08;通常指&#xff1a;…

Windows11 鼠标卡死任务栏卡死 假死解决方法

最近很多朋友都有一个问题&#xff0c;就是Windows11电脑 在编辑文档或者是切换窗口的时候出现任务栏假死&#xff0c;鼠标左右键失灵等现象&#xff0c;想了几天解决方案今天吧最直接的方法教给大家 首发玖毅论坛 玖毅论坛https://www.webbbs.cn/ 第一步&#xff1a; 第一种…

BeikeShop - 一个开源、用户友好的跨境电子商务平台

BeikeShop - 一个开源、用户友好的跨境电子商务平台 BeikeShop 是全球领先的基于 Laravel 框架的开源电子商务平台&#xff0c;专为国际贸易和跨境电子商务行业设计。 该系统是 100% 开源的&#xff01;它支持多语言、多币种、支付、物流、会员管理等广泛的实用功能&#xff0…

基于大模型的胆囊结石全周期诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与目标 1.3 研究方法与创新点 二、大模型预测胆囊结石的原理与技术基础 2.1 大模型概述 2.2 用于胆囊结石预测的数据来源 2.3 模型构建与训练 2.4 模型评估指标 三、术前风险预测与手术方案制定 3.1 术前评估指标与数…

[论文阅读] 人工智能 | Gen-n-Val:利用代理技术革新计算机视觉数据生成

Gen-n-Val&#xff1a;利用代理技术革新计算机视觉数据生成 论文信息 article{huang2025gennval,title{Gen-n-Val: Agentic Image Data Generation and Validation},author{Huang, Jing-En and Fang, I-Sheng and Huang, Tzuhsuan and Wang, Chih-Yu and Chen, Jun-Cheng},jo…

【AI论文】ReasonMed:一个370K的多智能体生成数据集,用于推进医疗推理

摘要&#xff1a;尽管基于推理的大型语言模型&#xff08;LLM&#xff09;在数学和编程方面表现出色&#xff0c;但它们在知识密集型医疗问题回答方面的能力仍未得到充分探索。为解决这一问题&#xff0c;我们推出了ReasonMed&#xff0c;这是最大的医疗推理数据集&#xff0c;…

singlefligt使用方法和源码解读

singlefligt使用方法和源码解读 介绍 sync.once保证其整个生命周期内只调用一次&#xff1b;而singleflight则可以保证在一定范围内其只调用一次。 背景|使用场景 应对缓存击穿&#xff1a;加锁可以解决这个问题&#xff0c;但是加锁不太灵活&#xff08;不能控制访问频率之…

HTTP 协议的基本概念(请求/响应流程、状态码、Header、方法)问题解决方案大全

HTTP 协议的基本概念&#xff08;请求/响应流程、状态码、Header、方法&#xff09;问题解决方案大全 一. 摘要 HTTP 协议是 Web 开发的基石&#xff0c;但初学者往往只停留在 GET、POST 的层面&#xff0c;对重定向机制、缓存控制、请求体解析等概念缺乏深入理解&#xff0c;…

Python中常用的函数

以下是Python中常用的函数分类整理&#xff0c;涵盖基础操作、数据处理、文件操作、面向对象等场景&#xff0c;并附上示例说明&#xff1a; --- ### **一、基础内置函数** | 函数 | 作用 | 示例 | |----…

【Windows】删除鼠标右键多余菜单的方法

要删除鼠标右键菜单中的多余菜单&#xff0c;如&#xff1a;“打开抖音壁纸”选项&#xff0c;通常需要通过修改注册表或使用第三方工具来清理残留的注册表项。以下是详细步骤&#xff08;操作注册表前务必备份&#xff01;&#xff09;&#xff1a; 方法一&#xff1a;通过注册…

【性能优化】启用zram

性能优化 系统内存不足时&#xff0c;可以考虑启动ZRAM功能&#xff08;压缩内存&#xff09;。关于ZRAM的概念&#xff0c;可自行学习。这里记录一下&#xff0c;启用ZRAM的方式。 启用ZRAM&#xff0c;可能会导致CPU升高&#xff0c;以及低内存时的恶性循环。是否启用需要综…

深度解析YOLOv8:CSPHet卷积结构如何实现极致轻量化

文章目录 一、背景介绍1.1 YOLOv8的现状1.2 降参数的必要性 二、相关技术介绍2.1 Dual思想2.2 HetConv 三、CSPHet结构设计3.1 CSP模块的改进3.2 结合HetConv3.3 参数量的下降 四、CSPHet的代码实现五、实验结果六、总结与展望 在目标检测领域&#xff0c;YOLO系列算法一直以其…

适配器模式demo

#include <QCoreApplication> #include <iostream>using namespace std;class XmCom { public:void ComByXm(){cout << "XM电源适配器只适用于小米笔记本电脑" << endl;} };class LxCom { public:virtual void ComByLx() 0;virtual ~LxCom…

数据处理考核要求-SQL测试的答案

在一个团队中&#xff0c;有业务人员。如业务人员深入理解数据处理的内容&#xff0c;会大幅度增强相互配合的效率。 针对业务人员进行针对性培训&#xff0c;还是比较容易掌握SQL的数据处理。类似与大学里面开的一门选修课。数据集选择帆软的Demo数据集。 业务人员学会SQL的…

第十七届全国大学生数学竞赛(数学类)初赛模拟试题

上周组委会发布了第十七届全国大学生数学竞赛通知&#xff0c;初赛暂定于2025年11月8日(星期六)上午9:00-11:30举行&#xff0c;同时今年新增了个亮点&#xff0c;针对与数学类的同学&#xff0c;即&#xff1a; 为提升全国大学生数学竞赛的含金量和公平性&#xff0c;并进一步…

解决: React Native iOS webview 空白页

iOS react-native-webview 之前是正常的, 升级了 react-native / react-native-webview 等 之后, 就变成了空白页. 通过下面的修改, 可以修复, 回到正常的状态. 来源: https://github.com/react-native-webview/react-native-webview/issues/3697 diff --git a/node_modules/…

VMware安装Ubuntu并实现root远程登录

前置信息 垃圾Ubuntu系统默认ssh、vim都没有&#xff01;&#xff01;&#xff01; 已踩坑cnmUbuntu处于sb安全机制要求&#xff0c;默认是禁用root直接登录的 1、修改root密码 sudo -sH &#xff08;可以让一个具有sudo权限的普通用户进入 root&#xff09; 然后就是pas…