R文本挖掘之五情感分析

2023-10-27

本文是转载!原文地址:CSDN-R语言做文本挖掘 Part5情感分析


Part5情感分析

这是这个系列里面最后一篇文章了,其实这里文本挖掘每一个部分单拎出来都是值得深究和仔细研究的,我还处于初级研究阶段,用R里面现成的算法,来实现自己的需求,当然还参考了众多网友的智慧结晶,所以也想把我的收获总结出来分享给大家,希望也能像我一样在看大家的分享时得到自己的启发。

网上翻了下中文文本情感分析的一些文章,再回想了一下我自己做情感分析的方法,觉得我的想法真的是简单粗暴直接。这是一篇介绍中文文本情感分析倾向的论文。http://wenku.baidu.com/link?url=TVf5LgNS6esnunpgubvM14z24m0f4lTyD483gw_hEnp2RyeL6XzanSlz8oCcZCFlwKLqD0PdBhVUcV4-0loTdGp3hL-kqeTTwJ3l91HfTa3,中间讲到做情感分析目前主要有三种方法。第一种由已有的电子词典或词语知识库扩展生成情感倾向词典;第二种,无监督机器学习的方法。第三种基于人工标注语料库的学习方法。

上面三种方法不仔细一一说明了,它们都有一个共同的特点,需要一个情感倾向的语料库。我在R中的实现方案与第一种方法类似,整理一个褒义词词库一个贬义词词库(这个万能的互联网上有自己稍加整理就OK)。给文本做分词,并提取出中间的情感词。给每条文本定情感倾向评分初始值为1,跟褒义贬义词词库做匹配,褒义词+1,贬义词-1,计算出每条文本的最终情感倾向评分,为正值则是正面评价,为负值则是负面评价。方法可以基本实现情感倾向判断,但还可以改进。像前面参考论文中讲到的,还可以根据词语的词性强弱来评定感情的强,不只是+1和-1之分;还有考虑一些词语在不同语境下情感倾向可能会不同,比如论文中讲到的“骄傲”,这个我在想可能需要整理出有这样特殊情况的词语;还有负负得正的情况,比如“不喜欢是不可能的事情!”,照我的评分标准它的结果就是负面评价了;反问的情况,“哪里便宜了?”,评出来结果变成了正。“便宜”这个词我把它放在褒义词表下,其实仔细考虑如果是说“便宜实惠”肯定是褒义,如果说“便宜没好货”,也会是褒义,这就不对了,还是第二个问题不同语境下情感倾向会不同。

R中的实现过程:

1.      数据输入处理

数据还是某品牌官微,取它微博中的1376条评论,情感褒义词库和贬义词库,将数据读入到R中。附词库下载地址:http://www.datatang.com/data/44317/,可能不是很全,需要自己整理丰富,我在看服装相关的文本时,发现有些词像“褪色”,“开线”,“显瘦”,“显胖”都没有在里面,这些就需要自己另外加进去。

[plain]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. hlzj.comment <- readLines("hlzj_commentTest.txt")  
  2. negative <-readLines("D:\\R\\RWorkspace\\hlzjWorkfiles\\negative.txt")  
  3. positive <-readLines("D:\\R\\RWorkspace\\hlzjWorkfiles\\positive.txt")  
  4. length(hlzj.comment)  
[1] 1376

[plain]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. length(negative)  
[1] 4477

[plain]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. length(positive)  
[1] 5588

 

2.      对评论做分词处理并评级

过程类似Part2中讲到的分词处理。然后我自己写了个方法getEmotionalType(),将分词结果与negative表和positive表作对照计算得分。

[plain]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. commentTemp <- gsub("[0-90123456789 < > ~]","",hlzj.comment)  
  2. commentTemp <-segmentCN(commentTemp)  
  3. commentTemp[1:2]  
[[1]]

[1] "恭喜""大家"""   "没有" "找到" "

[[2]]

 [1] "没有" "私信" ""   ""   "小编" ""   ""   ""   ""   "

[plain]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. EmotionRank <-getEmotionalType(commentTemp,positive,negative)  
[1] 0.073

[1] 0.145

[1] 0.218

[1] 0.291

[1] 0.363

[1] 0.436

[1] 0.509

[1] 0.581

[1] 0.654

[1] 0.727

[1] 0.799

[1] 0.872

[1] 0.945

[plain]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. EmotionRank[1:10]  
 [1] 1 0 2 1 1 2 3 1 0 0

[plain]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. commentEmotionalRank <-list(rank=EmotionRank,comment=hlzj.comment)  
  2. commentEmotionalRank <-as.data.frame(commentEmotionalRank)  
  3. fix(commentEmotionalRank)  

[plain]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. getEmotionalType <- function(x,pwords,nwords){  
  2.     emotionType <-numeric(0)  
  3.     xLen <-length(x)  
  4.     emotionType[1:xLen]<- 0  
  5.     index <- 1  
  6.     while(index <=xLen){  
  7.         yLen <-length(x[[index]])  
  8.         index2 <- 1  
  9.         while(index2<= yLen){  
  10.            if(length(pwords[pwords==x[[index]][index2]]) >= 1){  
  11.                emotionType[index] <- emotionType[index] + 1  
  12.             }else if(length(nwords[nwords==x[[index]][index2]]) >= 1){  
  13.                emotionType[index] <- emotionType[index] - 1  
  14.             }  
  15.             index2<- index2 + 1  
  16.         }  
  17.         #获取进度  
  18.        if(index%%100==0){  
  19.         print(round(index/xLen,3))  
  20.         }        
  21.         index <-index +1  
  22.     }  
  23.     emotionType  
  24. }  

查看到结果如下,第一个图里看着还挺正常的,第二个图好像是hlzj赞助的RM里出现了衣服被撕坏的时候的评论。没有黑他们家的意思,只是想找个例子来说明下差评的效果,好像不是很理想。那些反问的话无法识别判断,还有一些比较口语化的“醉了”,“太次”这样的词没有放到情感词库里,对这些评论的情感倾向识别效果不是很好。


像前面说的,方法有待改进,我的方法只是一个最基础的情感分析的实现方式,有任何问题欢迎指正。

转载请注明来源,谢谢!


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R文本挖掘之五情感分析 的相关文章

  • Rsolnp:在 cbind(temp, funv) 中:结果的行数不是向量长度的倍数(arg 1)

    我是 stackoverflow 的新手 搜索了很多 但找不到我的问题的答案 我正在尝试使用优化包 Rsolnp 来最小化以下问题 尽管求解器为我提供了解决方案 但每次运行代码时我都会收到以下警告消息 警告消息 1 在 cbind temp
  • 在 r 中导出矩阵

    我想在 R 中导出一个矩阵 并保留行和列的名称 当我使用 write table 或 write csv 时 我得到一个带有新列的矩阵 我该如何使用这个功能 感谢您的帮助 您不会获得新列 行名称将保存为文本文件中的第一列 因此 您可以指定在
  • R 脚本自动化时的不同结果

    以下命令对 pdf 文件执行 Ghostscript 这pdf file变量包含该 pdf 的路径 bbox lt system paste C gs gs8 64 bin gswin32c exe sDEVICE bbox dNOPAUS
  • R 中带有文件名的 For 循环

    我有一个文件列表 例如 nE pT sbj01 e2 2 csv nE pT sbj02 e2 2 csv nE pT sbj04 e2 2 csv nE pT sbj05 e2 2 csv nE pT sbj09 e2 2 csv nE
  • R中添加水印

    我在用magickR中的库 我想在一些图片上添加水印 I used image annotate功能如下 img lt image read C Users Maydin Desktop manzara png image annotate
  • decompose() 的周期太少[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 错误看起来像这样 decompose
  • 将命名参数列表传递给函数?

    我想编写一个小函数来从适当的分布生成样本 例如 makeSample lt function n dist params values lt makeSample 100 unif list min 0 max 10 values lt m
  • 如何在R中计算文本中的句子数?

    我使用 R 将文本读入readChar 功能 我的目的是测试文本句子中字母 a 出现次数与字母 b 出现次数一样多的假设 我最近发现了 stringr 包 它帮助我对文本做很多有用的事情 例如计算字符数以及整个文本中每个字母出现的总数 现在
  • 基于服务器中的条件逻辑呈现闪亮的用户输入

    我正在尝试设置一个闪亮的导航栏面板页面 其中用户控制我根据一组单选按钮中所做的初始选择来显示更改 我直接在 ui 中渲染单选按钮 然后在 Server r 中的 观察到的 逻辑控制结构内构建条件控件 弹出错误是因为我的初始 if 语句计算结
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • numpy.histogram 的 hist 维度,密度 = True

    假设我有这个数组 A array 0 0019879 0 00172861 0 00527226 0 00639585 0 00242005 0 00717373 0 00371651 0 00164218 0 00034572 0 008
  • 如何在for循环中引用变量?

    我正在循环访问不同的 data tables 和 data table 中的变量 但我在引用内部变量时遇到问题for loop dt1 lt data table a1 c 1 2 3 a2 c 4 5 2 dt2 lt data tabl
  • 重复测量引导统计数据,按多个因素分组

    我有一个看起来像这样的数据框 但显然还有更多行等 df lt data frame id c 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 cond c A A B B A A B B A A B B A A B B co
  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • 在 R 中向散点图添加线条

    如何向图表添加线条 我做了以下 dat lt data frame xvar 1 20 rnorm 20 sd 10 yvar 1 20 rnorm 20 sd 10 zvar 1 20 rnorm 20 sd 10 plot dat 1
  • 使用 pracma::findpeaks 识别持续峰值

    我的语法有问题peakpat内的选项findpeaks内的函数pramcaR 包 v 2 1 1 我使用的是 R 3 4 3 x64 Windows 我希望该函数能够识别可能有两个重复值的峰值 并且我相信该选项peakpat这就是我能做到的
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou

随机推荐

  • 教妹学Java(十三):if-else 语句详解

    大家好 我是沉默王二 一个和黄家驹一样身高 和刘德华一样颜值的程序员 本篇文章通过我和三妹对话的形式来谈一谈 if else 语句 教妹学 Java 没见过这么有趣的标题吧 语不惊人死不休 没错 本篇文章的标题就是这么酷炫 接受不了的同学就
  • ETL工具

    这些年 几乎都与ETL打交道 接触过多种ETL工具 现将这些工具做个整理 与大家分享 一 ETL工具 国外 1 datastage 点评 最专业的ETL工具 价格不菲 使用难度一般 下载地址 ftp ftp seu edu cn Pub D
  • 一步一步写STL:空间配置器 (1)

    侯捷说 追踪一流程序 并从中吸取养分 模仿着他写的程序 比那些自以为靠自己努力写出来的下三流程序价值高得多 至少我这么认为 世界上99 999 的程序 在STL面前都是下三流水平 侯捷老师这句话对STL的评价太高了 以前只是熟练使用STL
  • Tensorflow运行机制

    TensorFlow是一种基于数据流图的编程框架 它使用数据流图来描述计算过程 其中节点表示操作 边表示数据流 从而实现了高效的分布式计算和自动求导 在TensorFlow中 计算过程分为两个阶段 构建阶段和执行阶段 在构建阶段 我们使用T
  • 达梦数据库-分区表维护

    分区表的维护主要有增加分区 删除分区 交换分区 合并分区 拆分分区 1 增加分区 添加一个新的分区 2 删除分区 删除一个就分区 3 交换分区 将分区数据跟普通表交换 2张表结构必须一样 4 合并分区 将临近的两个分区合并为一个分区 目前仅
  • 绘图中的渐变

    绘图渐变 指的就是在指定区域内 指定开始位置到指定结束为止 一种颜色颜色逐渐变成另一种颜色的图 qt中的渐变分为三个类别 1线性类别 QLinearGradient 2 角度渐变 QConicalGradient 3 辐射渐变 QRadia
  • Android Studio 给方法添加注释自动生成参数的快捷设置

    没有废话 直接上图 Android Studio gt File gt Setting gt Keymap gt 发现框输入comment gt 选择Other的Fix doc comment 2 选择 Add keyboard short
  • Videos from Embedded Linux Conference 2014

    本文转载至 http free electrons com blog elc2014 videos As the summer is coming to an end we finally managed to publish the vi
  • Kubernetes详解(二十)——ReplicaSet控制器

    今天继续给大家介绍Linux运维相关知识 本文主要内容是ReplicaSet控制器 一 ReplicaSet控制器概述 ReplicaSet控制器是Pod类控制器的一种实现 该控制器用于确保其管控的Pod对象副本数量在任意时刻都能够满足用户
  • XXE-lab(全踩坑)实录

    在bWAPP中有一关是XML External Entity Attacks XXE 传送门 比较简单的了解了一下XXE 师傅的博客 浅谈XML实体注入漏洞 XXE漏洞全称XML External Entity Injection即xml外
  • 解决Windows系统下VNC Viewer无法连接到远程主机上的VNC Server的问题

    问题如下 笔记本 IP 10 100 172 194 上装了VNC Viewer 台机 IP 10 100 100 103 上装了VNC Server 原本笔记本连接无线网 可以通过VNC远程连接到办公网的台机的桌面 自从台机重装了系统后
  • 去掉suse里ls默认显示隐藏文件的特性

    以root权限suse终端时 执行ls命令 隐藏文件 文件名以 开头 也都显示出来了 这一点 我是不太喜欢 既然是隐藏文件 一般情况下就不要出现 尤其是 root目录 一堆隐藏文件 很影响我查找文件 要去掉这个特性 先执行alias命令 一
  • arxiv文章下载很慢怎么办?

    对于我们这样的深度学习屌丝来说 没钱 没资源 没数据 没时间 只能看看别人的论文生存了 经常会到arxiv上下载一些文章 比如cvpr的文章 但是 由于国内封锁 下载很慢 甚至接连几天打不开arxiv的网站 咋办 强烈推荐使用中科院arxi
  • usb描述符以及传输方式

    lsusb命令 Bus 002 表示第2个usb主控制器 Device 002 表示系统给usb鼠标分配的设备号 ID 8087 8002 Intel Corp 表示usb设备的ID 这个ID由芯片制造商设置 可以唯一表示该设备 8087
  • 洛谷P5731 【深基5.习6】蛇形方阵

    include
  • 电脑itunes,iTunes

    Music TV and podcasts take center stage iTunes forever changed the way people experienced music movies TV shows and podc
  • 内存管理之分段与分页

    内存管理之分段与分页 转载自多名技术分享者 仅供参考 第一篇 要理解分段和分页 那么得理解为什么会出现分段和分页的技术 首先 这两个技术都是为了利用和管理好计算机的资源 内存 在分段这个技术还没有出现之前 程序运行是需要从内存中分配出足够多
  • 【Verilog】Verilog定义二维数组(2D Array)

    目录 定义的种类 第一种 赋值方法 第二种 赋值方法 第三种 赋值方法 定义的种类 首先看几组定义类型 第一种 定义一个位宽为8的 data1 reg 和 data2 wire 的变量 reg 7 0 data1 wire 7 0 data
  • java.io.IOException: InvalidResourceRequestException: Invalid resource request

    1 背景 做一次kylin计算选择mr进行计算cube 但是报错 首先是 这一报错 报错打开是 yarn上的原因为 2019 05 09 15 07 38 495 ERROR Thread 52 org apache hadoop mapr
  • R文本挖掘之五情感分析

    本文是转载 原文地址 CSDN R语言做文本挖掘 Part5情感分析 Part5情感分析 这是这个系列里面最后一篇文章了 其实这里文本挖掘每一个部分单拎出来都是值得深究和仔细研究的 我还处于初级研究阶段 用R里面现成的算法 来实现自己的需求