当前位置: 首页 > news >正文

R语言对简·奥斯汀作品中人物对话的情感分析

项目背景

客户是一家文学研究机构,他们希望通过对简·奥斯汀作品中人物对话的情感分析,深入了解作品中人物的情感变化和故事情节的发展。因此,他们委托你进行一项情感分析项目,利用“janeaustenr”包中的数据集来构建情感分析模型。

数据来源

客户将提供“janeaustenr”包,该包包含了简·奥斯汀的几部小说(如《傲慢与偏见》、《理智与情感》等)的文本数据。你可以直接使用该包中的数据进行分析。
需求分析

    1. 目标:构建一个情感分析模型,对简·奥斯汀作品中人物对话进行情感分类(正面、负面或中性)。
    1. 数据集:使用“janeaustenr”包中的小说文本数据。
    1. 情感分类:将对话分为正面、负面和中性三类。
    1. 模型要求:
      • 需要考虑文本数据的预处理,如分词、去除停用词、词干提取等。
      • 需要选择合适的特征提取方法,如词袋模型、TF-IDF等。
      • 需要选择合适的分类算法,如朴素贝叶斯、支持向量机、随机森林等,并进行参数调优。
      • 需要对模型进行评估,包括准确率、召回率、F1分数等指标。
      交付成果
    1. R代码:提供完整的R代码,包括数据预处理、特征提取、模型建立和模型评估等步骤。
    1. 模型报告:提供一份详细的模型报告,包括数据预处理的结果、特征提取的方法、模型的性能评估结果等。
    1. 情感分析结果:对简·奥斯汀作品中人物对话进行情感分类,并生成情感分析结果报告,包括对话的情感极性、情感强度等信息。

技术要求

    1. 熟悉R语言:能够熟练使用R语言进行文本数据分析和情感分析。
    1. 了解情感分析:熟悉情感分析的基本原理和步骤,能够独立完成模型的建立和评估。
    1. 文本处理能力:能够处理大规模文本数据,进行数据预处理和特征提取。
    1. 模型评估能力:能够使用合适的评估指标对模型进行评估,并解释评估结果。

按步骤构建整个流程,包括数据加载、预处理、特征提取、模型建立、评估等。以下是基于R语言的实现方案。

1. 加载必要的包

首先,确保安装并加载所需的R包,包括 janeaustenr, tidyverse, tm, textclean, text, caret, e1071 等:

# 安装必要的包
install.packages(c("janeaustenr", "tidyverse", "tm", "textclean", "text", "caret", "e1071"))# 加载包
library(janeaustenr)
library(tidyverse)
library(tm)
library(textclean)
library(text)
library(caret)
library(e1071)

2. 数据加载与准备

janeaustenr 包中包含了简·奥斯汀的作品数据。我们需要从该包中提取出人物对话的文本,并整理为适合情感分析的格式。

# 加载简·奥斯汀的文本数据
data("austen_books")# 查看数据结构
head(austen_books)# 选择对话文本,假设每行代表一段对话
dialogue_data <- austen_books %>% filter(str_detect(text, "[A-Za-z]")) %>%  # 筛选非空行select(book, text)  # 保留书名和文本

3. 数据预处理

数据预处理包括去除标点符号、数字、停用词等,进行分词,并进行词干提取。

# 文本清洗函数
clean_text <- function(text){text %>%tolower() %>%                      # 转小写removePunctuation() %>%             # 去除标点符号removeNumbers() %>%                 # 去除数字removeWords(stopwords("en")) %>%    # 去除英语停用词stripWhitespace() %>%               # 去除多余空格wordStem()                          # 词干提取
}# 应用文本清洗
dialogue_data$text_clean <- sapply(dialogue_data$text, clean_text)# 查看清洗后的结果
head(dialogue_data$text_clean)

4. 特征提取

使用 tm 包的 DocumentTermMatrix (DTM) 或 text 包的 dfm 来提取特征。这里我们将使用 tf-idf (词频-逆文档频率) 作为特征提取方法。

# 创建一个文档-词项矩阵 (Document-Feature Matrix)
corpus <- Corpus(VectorSource(dialogue_data$text_clean))
dtm <- DocumentTermMatrix(corpus, control = list(weighting = weightTfIdf))# 转换为矩阵
dtm_matrix <- as.matrix(dtm)# 查看提取的特征
head(dtm_matrix)

5. 情感标签

由于目前数据集中没有情感标签,我们假设可以基于一些预定义的情感词典来标注情感。可以使用 text 包中的情感分析工具,或结合情感词典进行标签分类。

例如,利用 text 包进行情感分析并为每段对话打标签。

# 使用text包进行情感分析
sentiment_scores <- textdata::lexicons$afinn# 假设情感分析返回一个情感分数(负数为负面,正数为正面,中性为0)
dialogue_data$sentiment <- sapply(dialogue_data$text_clean, function(text){score <- sum(sapply(str_split(text, " "), function(word) sentiment_scores$score[sentiment_scores$word == word]))return(ifelse(score > 0, "positive", ifelse(score < 0, "negative", "neutral")))
})# 查看情感标签
head(dialogue_data)

6. 构建模型

我们可以选择常用的分类算法,如朴素贝叶斯、支持向量机(SVM)或随机森林。这里以支持向量机为例。

# 将情感标签转换为因子类型
dialogue_data$sentiment <- factor(dialogue_data$sentiment, levels = c("negative", "neutral", "positive"))# 划分训练集和测试集
set.seed(123)
trainIndex <- createDataPartition(dialogue_data$sentiment, p = 0.8, list = FALSE)
train_data <- dialogue_data[trainIndex, ]
test_data <- dialogue_data[-trainIndex, ]# 使用SVM训练模型
svm_model <- svm(sentiment ~ ., data = train_data, kernel = "linear")# 预测情感标签
predictions <- predict(svm_model, test_data)# 评估模型
conf_matrix <- confusionMatrix(predictions, test_data$sentiment)
print(conf_matrix)

7. 模型评估

通过 confusionMatrix 函数评估模型的性能,包括准确率、召回率和F1分数等。

# 打印评估结果
conf_matrix# 提取性能指标
accuracy <- conf_matrix$overall["Accuracy"]
recall <- conf_matrix$byClass["Recall"]
f1_score <- conf_matrix$byClass["F1"]print(paste("Accuracy:", accuracy))
print(paste("Recall:", recall))
print(paste("F1 Score:", f1_score))

8. 生成情感分析报告

最后,将情感分析结果生成报告,包括每段对话的情感极性和强度。

# 为每段对话生成情感分析报告
sentiment_report <- dialogue_data %>%select(book, text, sentiment) %>%mutate(sentiment_score = ifelse(sentiment == "positive", 1, ifelse(sentiment == "negative", -1, 0)))# 输出情感分析报告
write.csv(sentiment_report, "sentiment_analysis_report.csv")

9. 结果展示

根据需求,你可以将情感分析结果可视化,例如使用 ggplot2 展示每本书的情感分布。

# 使用ggplot2绘制情感分布
ggplot(sentiment_report, aes(x = sentiment, fill = sentiment)) +geom_bar() +facet_wrap(~book) +labs(title = "Sentiment Distribution in Jane Austen's Books", x = "Sentiment", y = "Frequency")

总结

通过上述步骤,我们能够从简·奥斯汀的作品中提取人物对话,进行数据预处理、特征提取、情感分析,并利用机器学习模型进行情感分类。最后,我们能够提供模型评估指标以及生成情感分析报告。

这套方案考虑了文本数据的预处理、特征工程、情感分析和模型评估,适应了客户的需求。如果有更多的标注数据或优化空间,可以进一步改进模型和分析方法。

相关文章:

R语言对简·奥斯汀作品中人物对话的情感分析

项目背景 客户是一家文学研究机构&#xff0c;他们希望通过对简奥斯汀作品中人物对话的情感分析&#xff0c;深入了解作品中人物的情感变化和故事情节的发展。因此&#xff0c;他们委托你进行一项情感分析项目&#xff0c;利用“janeaustenr”包中的数据集来构建情感分析模型。…...

股指期货基差为正数,这是啥意思?

在股指期货的世界里&#xff0c;有个挺重要的概念叫“基差”。说白了&#xff0c;基差就是股指期货的价格和它对应的现货价格之间的差价。今天&#xff0c;咱们就来聊聊当这个基差为正数时&#xff0c;到底意味着啥。 基差是啥&#xff1f; 先复习一下&#xff0c;基差 股指…...

黑马程序员MybatisPlus/Docker相关内容

Day01 MP相关知识 1. mp配置类&#xff1a; 2.条件构造器&#xff1a; 具体的实现例子&#xff1a; ①QuerryWapper&#xff1a; ②LambdaQueryWrapper: 3.MP的自定义SQL 4.MP的Service层的实现 5.IService下的Lambda查询 原SQL语句的写法&#xff1a; Lambda 查询语句的…...

使用 Vue 和 Canvas-Confetti 实现烟花动画特效

在开发中&#xff0c;为用户提供具有视觉冲击力的反馈是一种提升用户体验的好方法。今天&#xff0c;我们将结合 Vue 框架、canvas-confetti 和 Lottie 动画&#xff0c;创建一个动态对话框动画&#xff0c;其中包含炫酷的烟花特效。 效果图&#xff1a; 效果简介 当用户触发…...

【银河麒麟操作系统真实案例分享】内存黑洞导致服务器卡死分析全过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 现象描述 机房显示器连接服务器后黑屏&#xff…...

如何加强游戏安全,防止定制外挂影响游戏公平性

在现如今的游戏环境中&#xff0c;外挂始终是一个困扰玩家和开发者的问题。尤其是定制挂&#xff08;Customized Cheats&#xff09;&#xff0c;它不仅复杂且隐蔽&#xff0c;更能针对性地绕过传统的反作弊系统&#xff0c;对游戏安全带来极大威胁。定制挂通常是根据玩家的需求…...

SpringBoot整合knife4j,以及会遇到的一些bug

这篇文章主要讲解了“Spring Boot集成接口管理工具Knife4j怎么用”&#xff0c;文中的讲解内容简单清晰&#xff0c;易于学习与理解&#xff0c;下面请大家跟着小编的思路慢慢深入&#xff0c;一起来研究和学习“Spring Boot集成接口管理工具Knife4j怎么用”吧&#xff01; 一…...

城电科技|光伏廊道是什么?安装光伏廊道有什么好处?

光伏廊道是什么&#xff1f;光伏廊道专门设计用于集中安装太阳能光伏发电系统的建筑物或构筑物&#xff0c;它可以将光伏转换成可以用于供电的清洁绿电。光伏廊道通常由阳能电池板、太阳能电池、控制器、逆变器、混凝土、钢材等材料组成&#xff0c;具备发电、坚固、耐用、防水…...

当DHCP服务器分配了同一个IP地址

当DHCP服务器分配了同一个IP地址给多个设备时&#xff0c;这通常会导致网络问题&#xff0c;如IP地址冲突&#xff0c;进而影响设备的网络连接。以下是详细的分析和解决步骤&#xff1a; 原因分析&#xff1a; IP地址租约未过期&#xff1a; 租约管理&#xff1a;DHCP服务器维…...

储能能量自动化调配装置功能介绍

随着可再生能源的快速发展&#xff0c;光伏发电已成为全球能源结构转型的关键技术之一。与此同时&#xff0c;储能技术作为实现光伏发电稳定输出的核心技术&#xff0c;得到了广泛关注。在企业电网中&#xff0c;光伏储能系统的运维管理不仅关乎能源利用效率&#xff0c;还涉及…...

vite5+vue3+Ts5 开源图片预览器上线

images-viewer-vue3&#xff1a;一款Vue3的轻量级图像查看器&#xff0c;它基于Flip动画技术&#xff0c;支持PC和h5移动网页预览照片&#xff0c;如果它是Vue3开发的产品。 npm开源地址:https://www.npmjs.com/package/images-viewer-vue3?activeTabreadme Flip 动画 < …...

【深度学习】深入解析长短期记忆网络(LSTMs)

长短期记忆网络&#xff08;Long Short-Term Memory networks, LSTMs&#xff09;是一种特殊的递归神经网络&#xff08;RNN&#xff09;&#xff0c;专门设计用来解决标准 RNN 在处理长序列数据时的梯度消失和梯度爆炸问题。LSTMs 在许多序列数据任务中表现出色&#xff0c;如…...

从Web3到智能合约:探索新一代数据交互模式

随着互联网技术的不断演进&#xff0c;Web3的到来标志着互联网的一个新纪元。与传统的Web2相比&#xff0c;Web3倡导去中心化、更加开放和透明的网络架构&#xff0c;而智能合约则是其中的核心技术之一。本文将介绍Web3与智能合约的概念、应用以及它们如何改变数据交互模式&…...

排查bug的通用思路

⭐️前言⭐️ APP点击某个按钮没有反应/PC端执行某个操作后&#xff0c;响应较慢&#xff0c;通用的问题排查方法: 从多个角度来排查问题 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评…...

如何利用Python爬虫获得商品类目

在当今数字化时代&#xff0c;获取和分析数据的能力对于任何希望在市场上保持竞争力的企业来说都是至关重要的。对于电子商务平台和市场研究公司而言&#xff0c;获取商品类目数据尤为重要&#xff0c;因为这些数据可以帮助他们更好地理解市场趋势、优化产品目录并制定有效的营…...

如何通过 Windows 自带的启动管理功能优化电脑启动程序

在日常使用电脑的过程中&#xff0c;您可能注意到开机后某些程序会自动运行。这些程序被称为“自启动”或“启动项”&#xff0c;它们可以在系统启动时自动加载并开始运行&#xff0c;有时甚至在后台默默工作。虽然一些启动项可能是必要的&#xff08;如杀毒软件&#xff09;&a…...

大模型学习有什么发展前景?

前景人工智能大模型是指拥有超大规模参数&#xff08;通常在十亿个以上&#xff09;、复杂计算结构的机器学习模型。它通常能够处理海量数据&#xff0c;完成各种复杂任务&#xff0c;如自然语言处理、图像识别等。 2024年政府工作报告提出“发展新质生产力”&#xff0c;并将…...

Excel技巧:如何批量调整excel表格中的图片?

插入到excel表格中的图片大小不一&#xff0c;如何做到每张图片都完美的与单元格大小相同&#xff1f;并且能够根据单元格来改变大小&#xff1f;今天分享&#xff0c;excel表格里的图片如何批量调整大小。 方法如下&#xff1a; 点击表格中的一个图片&#xff0c;然后按住Ct…...

独著与编著的区别是?

独著和编著主要有以下区别&#xff1a; 一、创作性质 - 独著 - 独著是作者完全独立进行创作的作品。其内容是作者自己的研究成果、观点见解或者经验总结。作者从最初的选题构思&#xff0c;到资料收集、分析研究&#xff0c;再到内容撰写、修改润色等全过程都是独立完成的。…...

vue中pdf.js的使用,包括pdf显示,跳转指定页面,高亮关键词

目录 一、下载pdf.js 二、引入到本地的项目中 三、实现预览pdf 四、跳转到指定页面 五、利用pdf里面的find查找关键词 六、修改页面大小为实际大小 一、下载pdf.js https://github.com/mozilla/pdf.js 里面有很多的版本&#xff0c; 高版本的可能浏览器不兼容或者还要考…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...