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
英文地址,請注明出處:http://en.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…