|

词典型情感分析大致有以下几个步骤:
训练数据集、neg/pos情感词典、分词+数据清洗清洗(一、二、三级清洗步骤)、计算情感得分、模型评价
(1)在分析过程中,难免会产生很多中间变量,它们会占用大量内存。书中提到通常会将所有的临时中间变量命名为temp,只需要保证下一个temp出现之前,临时变量不会再延用就可以了。
(2)毫无疑问,如果不追求高大上的算法的话,词典法不失为一种好方法,其实有时候我们使用了很多方法,结果发现并没有什么质变,也浪费了大量时间;
比如在优化词典的时候,我希望使用高大上的算法解决问题,自动分辨出情感词,结果浪费了大量的时间,尝试了卡方统计量、各种分类器等等,结果可想而知,最后还是使用人工的方法将词典优化了一遍,是的,是用肉眼。 其实有时候看起来最笨的方法也许是现阶段最有效最合适最省事的方法,只是它看起来很low,这也许就是笨方法的高深之处,“聪明人”是不屑于使用这些方法的。
(3)仅仅使用词汇并不能非常准确的识别一条文本所表达的情感倾向。一些修辞手法例如反讽、欲扬先抑等等也会给基于词典的情感分析造成困难。
回复此公众号“情感分析”获取源码,以及word版原文查看。向小编咨询问题,联系微信:hai299014
一、训练数据集
文本作为非结构化数据,在构造训练集的时候,很少会发给你完整的数据集,可能需要批量读取txt字符。
批量读取txt字符文件
如何导入?
如何用函数批量导入文本,并且能够留在R的环境之中?循环用read.table,怎么解决每个文本文件命名问题?
list函数能够有效的读入,并且存放非结构化数据。
reviewpath?<-?"F:/R语言/train2"??
completepath?<-?list.files(reviewpath,?pattern?=?"*.txt$",?full.names?=?TRUE)??
代码解读:reviewpath为文件夹的目录名字,completepath为读取文件夹中所有的文件,生成字符串(character)格式。
如何读取单文本内容?
前面文档导入,相当于是给每个文档定了位,现在需要读入单个文档内的文本信息。
文本文档读取的时候会出现很多问题,比如分隔符、制表符等,而出现乱码,需要逐行读取。
[plain]?view plain?copy?print
######批量读入文本??
read.txt?<-?function(x)?{??
??des?<-?readLines(x)???????????????????#每行读取??
??return(paste(des,?collapse?=?""))?????#没有return则返回最后一个函数对象??
}??
review?<-?lapply(completepath,?read.txt)??
#如果程序警告,这里可能是部分文件最后一行没有换行导致,不用担心。??
代码解读:read.txt是一个简单的逐行读取的函数,readLines函数,是将一段文字分成以下的形式,需要粘贴起来;
[plain]?print?
[1]?""??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
[2]?"刚买的这款电脑,在自提点打开的,就发现键盘已经坏了,有个按键都快掉了,自提点不管,让去联系退换货部门,退换货部门说键盘坏了不管退换,让去惠普自己更换新键盘。"??
[3]?""??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
[4]?"在京东刚买的东西出现问题就要四处跑去修理,他们把责任推的一干二净,现在除非你出具惠普的质检报告,他们才给受理。"????????????????????????????????????????????????
[5]?""??????
return(paste)函数将每一行粘贴在一起,最后返回完整的文本内容;
lapply表示逐文本读取。
加入文档名字
读取了每个文档到list之中,怎么跟每个文档名字匹配在一起?
docname?<-?list.files(reviewpath,?pattern?=?"*.txt$")??
reviewdf?<-?as.data.frame(cbind(docname,?unlist(review)),???
??????????????????????????stringsAsFactors?=?F)???
colnames(reviewdf)?<-?c("id",?"msg")???#列名??
代码解读:list.files中,full.names=F代表返回文档名字(默认),full.names=T则定位文档;
利用as.data.frame成为一个数据框,并且不变成因子型,stringsAsFactors是因为文档名字列,很容易变成字符因子型,需要关闭这功能;
colnames修改列名,还有names也可以达到同样的效果。

图 1
`read.csv`函数读取文件时,可能报警:“EOF within quoted string”,一般为数据中不正常的符号所致,常见的方法是将`quote = ""`设置为空,这样做虽然避免了警告,但是仍然解决不了问题,有时数据会对不上号,所以最好从符号上着手将一些特殊符号去除。
本文中导入的数据集是清华大学李军标注的近24000个酒店评论文本和谭松波整理的12000个来自京东、携程、当当网的跨行业评论文本。并给出了每个文本数据的评分。李军老师的数据是众多的txt文件的评论文本+用rlabelclass文件来存放文本标签,可以用read.table来调用。中科院自动化所的中英文新闻语料库?http://www.datatang.com/data/13484 中文新闻分类语料库从凤凰、新浪、网易、腾讯等版面搜集。英语新闻分类语料库为Reuters-21578的ModApte版本。
train<-?read.csv("./train.csv",quote?=?"",sep?=?""",?header?=?T,?stringsAsFactors?=?F)??
#没有quote,会出现Warning?message:EOF?within?quoted?string??
#读入csv格式的时候,出现所有字符变成双引号,需要sep?=?""",来划分开,字符串分隔符的问题???
会出现的问题:
(1)EOF?within?quoted?string
解决方法:quote="";
(2)CSV格式被读入R内存中时,所有字符、变量内容都被加了双引号?
(编辑:安卓应用网_ASP源码网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|