Python做文本情感分析之情感极性分析

所需积分/C币:46 2018-02-23 19:56:59 2.99MB PDF
收藏 收藏 10
举报

文本情感分析(也称为意见挖掘)是指用自然语言处理、文本挖掘以及计算机语言学等方法来识别和提取原素材中的主观信息。 本文使用python来做文本情感分析
Puno做乂本情分析之感校性分析-闫书 LOso massed from collections import defaultdict 1.文本切剀 def sent word(senter Segment a sentence to words Delete stopwords segresu1t-「1 segResult. append(w) 」 fcr word in segResult 在此笔者使用 Jieba进行分词。 122去除停用词 遍历所有语料中的所有词语,删除其中的停用词 e.g.这样)的酒店这样的价格/还算不错 >酒店配/价格/算不错 1.3枃建模型 1.31将词语分类并记录其位置 将句子中各类词分别存储并标注位置。 httP /A lianshu comin/Acfrf16103737nomohile=ves 3/16 Python做义本情戀分竹之情感性分析-间竹 2.情感定位 def classifywords ( wordDict) (1)情感词 dInes( BasonNLP_ sentiment_scare. txt) senDict defaultdicto) for s in senlis senDict[s split()[0]]= s split(')[1] #(2)否定词 netList =readLines('notDict. txt') #(3)程戊副词 degreeList readLines('degreeDict txt') degreeDict - defaultdicto fcr d in degreelist degreeDict[d split(,')[0]l=dsplit(,)[1] senWord defaultdicto netword defaultdicto dcgrccword dcfaultdicto for word in wordDict keys() if word in senDict keys( and word not in notList and word not in degreeDict keys( senWord[wordDict[word]l= senDict[word] 1if word in notlist and word nat in degreeDict keys elif word in degreeDict keys() degreeword i wordDict[word]]=degreeDict[word] return senwo 1.32计算句子得分 在此,简化的情感分数计算逻辑:所有情感词语组的分数之和 定义一个情感词语组:两情感词之间的所有否定词和程度副词与这两情感词中的后一情 感词构成—个情感词组,即 methords+ degreewords+ sentiwords,例如不是很交好,其中不 是为否定词,很为程度副词,交好为情感词,那么议个情感词语组的分数为 fna1 Sentiscore=(-1)1*1,25*9,74712773968 其中1指的是—个否定词,1.25是程度副词的数值,θ.7471273958为交的情感分数 伪代码如下: finalsentiscore=(-1)A(num of notWords)* degreeNum sentiScore finalScore sum( finalsentiScorc) httP /A lianshu comin/Acfrf16103737nomohile=ves △1A Python做义本情戀分竹之情感性分析-间竹 情感獒合 def score sent( senNord, nothord degreeNord, segResult) e = a 存所有情感词的位置的列表 ≤PnL keys) notloc =-1 遍历句中所有单词 segResu1t,i为单词绝对位置 inge(e, len(segResult) 如果该词为情感词 #1oc为情感词位置列表序号 scnloc 1= 1 妾冻加该情感词分数 score +=w* float(senWordrily # if senloc len(senLoc)-1: 判断该情感词与下一情感词之间是否有否定词或程度剖词 为绝对位置 for j in range( senLoclsenloc], senLoclsenlDc +1): #如果有否定词 if in notloc 如果有程度副词 elif j in degreeloc: #1定位至下一个情感词 if senor len (senLoc)-1 rcturn score 1.4模型评价 将600多条朋友圈文本的得分排序后做出散点图 Sentiment score 200 300 7p0 Score distribution 其中大多数文本被判为正向文本符合实际情况,旦绝大多数文本的情感得分的绝对值在 10以內,这是因为笔者在计算一个文本的情感得分时,以句号作为一句话结束的志 在一句话内,情感词语组的分数累加,如若一个文本中含有多句话时,则取其所有句子 情感得分的平均值。 然而,这个模型的缺点与局限性也非常明显 httP /A lianshu comin/Acfrf16103737nomohile=ves 5/16 Puno做乂本情分析之感校性分析-闫书 首先,段落的得分是其所有句子得分的平均值,这一方法并不符合实际情况。正如文 章中先后段落有重要性大小之分,一个段落中前后句子也同样有重要性的差异。 其次,有一类文本使用贬义词来表示正向意义,这类情况常出现与宣传文本中,还是 那个例子 有车一族都用了这个宝贝,后果很严重哦[銜笑][偷笑][偷笑],交警工资汁会打5折,没有超速罚款了[吡牙] 「牙][呲牙]2,移联邇公司大輕度裁贝,电话费少了[呲牙][呲牙][呲牙13,中石化中石汕裁员2成,路痴不 再述路,省油[悠闲][終闲][悠闪]5,保险公司裁员2成,保费于1.折2成,全国通用[憨笑][憨笑]憨笑]买不买 你白己看着办吧L调皮]调砹儿调皮]2989元钎轅魔镜带回家,推'还返利L得意」 Score distribution中得分小于-16的几个文本都是与这类情况相似,这也许需要深度 学习的方法才能有效解决这类问题,普通机器学习方法也是很难的 ·对于正负向文本的判断,该算法忽略了很多其他的否定词、程度副词和情感词搭配的 情况;用于判断情感強弱也过于简单。 总之,这一模型只能用做 BENCHMARK 2基于机器学习的文本情感极性分析 21还是数据准备 21.1停用词 (同1.14) 21.2正负向语料库 来源于有关中文情感挖掘的酒店评论语料(htp:/ww. datatang. com/data/11936),其中 正向7000条,负向3000条(笔者是不是可以认为这个世界还是充满着满满的筜意 呢…),当然也可以参考情感分析资源(转) htt:/ wcnblogs. com/ finesite/p/3381803htm)使用其他语料作为训练集。 213验证集 Amazon上对 Phone6s的评论,来源已不可考 22数据预处理 2.21还是要分词 (同12.1) httP /A lianshu comin/Acfrf16103737nomohile=ves 6/16 Python做义本情戀分竹之情感性分析-间竹 import codecs from skl from sklearn, externals import joblib trom sklearn preprocessing import scale from skI from sklearn decomposition import PCA ort stat from keras models import Sequential from keras layers import Dense, Dropout, Activation from keras optimizers import SGD from sklearn metrics import fl score from bayes opt import Bayesianoptimization as Bo from sklearn metrics import roc curve, auc import matplotlib. pyplot as plt def parsesent(sentence) seg_ list =jieba cut(sentence) ou tpuL join(list(seg_list)) use space to join them return output 222也要去除停用词 (同122) 2.23训练词向量 〔重点来了!)模型的输入需是数据元组,那么就需要将毎条数据的词语组合转 化为一个数值向量 常见的转化算法有但不仅限于如下几种 请原谅不知死活的胖子直接用展示的pp截图作说明,没错,我就是懒,你打我呀 · Bag of Words httP /A lianshu comin/Acfrf16103737nomohile=ves 711A Puno做乂本情分析之感校性分析-闫书 Bag of Words(Bow) One-hot Representation 向量中每个分量表示词典中对应单词在文档中出现的次数 Bob likes to play basketball, Jim likes too Bob also likes to play football games 构造词典 Dict=1. Bob, 2- like, 3. to, 4. play, 5 basketball, 6: also, 7. football 8: games. 9: Jim, 10: too] ,2.1110.0.0.1,1 vec2=[1,1.1,10,1,1,L0.0 缺陷 词汇鸿沟”现象:稀疏方式存储,其独立性假设不太符合言文字实际 分布情况,忽略了单词间的语法和序,无汯了解单词间的关联程度 解决 采用 SCPCD抽取整个短语 采用高阶(2阶以上)统计语言模型,例如 bigram、 trigram等 Bag of Words TF-IDF TF-IDF 如果某个词在一篇文章中出现的频率高,且在其他文章中出现 频率低,则认为该词具有很好的类别区分能力,赋予更高权重 TF (Term Frequency)给定词在该文档中出现的次数 IDF (Inverse Document Frequency):词普這重要性的度量 缺陷 单纯以词频作为羊词重要性的度量,对于位置没有敏感性 解决 人为添加权重 例如:第一段和最后一段蹴予更高权重;每段第一句赋予更高权重 TE-IDE ·Word2vec httP /A lianshu comin/Acfrf16103737nomohile=ves 9:1A Python做义本情戀分竹之情感性分析-间竹 Word2Vec 词向量空间上的相似度可以用来表示文本语义上的相似度,常被 用于词语聚羹、找同义词、词性分析等 ny-l CGOW 5kip-Gram COntinuous Bag of-Words Model) with cBoW:根椐上下文词颈位醫t词 Sskip-Gran:用于预测位首的单词的上下文单词 P(ww),其中t-c≤i≤P+c且i≠t 特点 可讲行向量的加法组合运算 Additive Compos) 伤如:e(kng)-ve(man)+vec( woman')=vec!quer) 训练高效 Word2Vec 在此笔者选用Word2vec将语料转化成向量,具体步骤可参考笔者的文章问答机器人的 Python分类器(http://wwwjianshu.com/p/bacb99b6671b) httP /A lianshu comin/Acfrf16103737nomohile=ves 16 Python做义本情戀分竹之情感性分析-间竹 def getwordvecs wordList): word. replace( \n,') try vecsappend(madel[ word return np array(vecs, dtype -'tloat') def buildvecs(filename) with open(filename, "rb") as txtfile tfile for lines in txtfile lines lines split(\n for line in lines: line jicba cut(linc) resultList getwordVecs(line) for each sentence, the mean vector of all its vectors is used to represent esultArray sum(np array (resultList))len(resultList) d(resultArray) return pcsInput load word 2vec format( corpus, model. bin", binary True) # textfile-[u'标准问太差房问还不如3的而且设施非常陈旧,建议酒店把老的标准间从改善,,u'这个丙 posInput buildvecs( pos, txt') egInput buildvecs( pos. txt') y- np, concatenate((np, ones(len(posInput)), np zeros(len(negInput)))) for neg in negInput x appe 224标准化 虽然笔者觉得在这一问题中,标准化对模型的准确率影响不大,当然也可以尝试其他的 标准化的方法 t standardization X 225降维 根据PCA结果,发现前100维能够 cover95%以上的 variance 10 httP /A lianshu comin/Acfrf16103737nomohile=ves 10/1A

...展开详情
试读 16P Python做文本情感分析之情感极性分析
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    一个资源只可评论一次,评论内容不能少于5个字
    linke_pass 跟我的需求不是很相符,不过还是感谢分享
    2019-03-05
    回复
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    Python做文本情感分析之情感极性分析 46积分/C币 立即下载
    1/16
    Python做文本情感分析之情感极性分析第1页
    Python做文本情感分析之情感极性分析第2页
    Python做文本情感分析之情感极性分析第3页
    Python做文本情感分析之情感极性分析第4页
    Python做文本情感分析之情感极性分析第5页

    试读已结束,剩余11页未读...

    46积分/C币 立即下载 >