基于python的情感分析案例,python情感分析 情感词典法

  基于python的情感分析案例,python情感分析 情感词典法

  不甘心的时候,是进步;当你痛苦的时候,你就在成长。

  文章目录

  一. Snownlp的介绍

  SnowNLP是用python编写的类库,可以方便地处理中文文本内容。是受TextBlob的启发写的。由于大部分自然语言处理库都是针对英文的,所以编写了一个可以方便处理中文的类库。和TextBlob不一样,这里不用NLTK,所有的算法都是自己实现的,还带了一些训练好的字典。注意,本程序是unicode代码,使用时请自行解码成unicode代码。#安装

  pip安装snownlp-I http://pypi.douban.com/simple信任的主机pypi.douban.com

  第二,Snownlp的特点是中文分词(基于字符的生成模型)

  词性标注(TnT 3克隐马)

  情感分析(官网没有介绍具体原理,但指出购物的评论准确率更高,其实是因为其语料库主要是关于购物的)

  文本分类(原则是朴素贝叶斯)

  转换为拼音(通过Trie树实现最大匹配)

  将繁体转换为简体(通过Trie树实现的最大匹配)

  提取文本关键词(TextRank算法)

  提取文本摘要(TextRank算法)

  tf,idf

  标记化(分成句子)

  文本相似性(BM25)

  三。Snownlp库的基本使用

  这个女孩真漂亮

  s=SnowNLP(word)

  印刷(单词)#分词

  打印(列表(s.tags)) #词性标注

  打印(情感)#情感得分

  印刷体(简体拼音)#拼音

  Print(SnowNLP(u的绿色,白露是霜。所谓夷人在水一方。 ).汉)#繁体字到简体字

  运行结果如下:

  [这个,女孩,真实,不错]

  [(this , r ),( girl , n ),( true , d ),( nice , a)]

  0.9002381975487243

  [着,个,姑,娘,真,好,看]

  白露变成了霜。所谓伊人在水一方。从snownlp导入SnowNLP

   text=u

  自然语言处理是计算机科学和人工智能领域的一个重要方向。

  它研究用自然语言实现人与计算机之间有效交流的各种理论和方法。

  自然语言处理是一门融合了语言学、计算机科学和数学的科学。

  因此,该领域的研究将涉及自然语言,即人们日常使用的语言,

  因此,它与语言学的研究密切相关,但又有重要的区别。

  自然语言处理不是对自然语言的一般研究,

  而是开发一个能有效实现自然语言交流的计算机系统,

  尤其是软件系统。所以它是计算机科学的一部分。

  s=SnowNLP(文本)

  Print(s.keywords(limit=3)) #关键字提取

  打印(-)

  Summary=s.summary(limit=4) #文本摘要

  对我来说,概括地说:

  打印(一)

  打印(-)

  打印句子#句子

  运行结果如下:

  [语言,自然,计算机]

  -

  所以它是计算机科学的一部分。

  自然语言处理是计算机科学和人工智能的一个重要方向。

  自然语言处理是一门融合了语言学、计算机科学和数学的科学。

  因此,它与语言学的研究密切相关。

  -

  【‘自然语言处理是计算机科学和人工智能领域的一个重要方向’,‘它研究可以用自然语言实现人与计算机之间有效交流的各种理论和方法’,‘自然语言处理是一门融合了语言学、计算机科学和数学的科学’,‘因此’,‘该领域的研究将涉及自然语言’,‘即人们在日常生活中使用的语言’,因此, 它与语言学的研究密切相关”,“但有重要的区别”,“自然语言处理不是对自然语言的一般研究”,“而是开发一种能有效实现自然语言交流的计算机系统”,“尤其是软件系统”,“所以它是计算机科学的一部分”]

  进程以退出代码0#结束,评估单词对文本的重要性。

  # TF-IDF是一种统计方法,用于评估单词对文档集或语料库中的某个文档的重要性。

  # TF词频越大越重要。而文中的“的”、“有”等无意义词出现频率很高,但信息量几乎为零。这种情况使得单纯看词频来评价词的重要性是不准确的。因此,添加了idf。

  # IDF的主要思想是,如果包含术语T的文档数量越少,即N越小,IDF越大,则术语T越重要。

  只有结合# TF-IDF,才能准确全面的评价“TF-IDF”这个词对文本的重要性。

  从snownlp导入SnowNLP

  S=SnowNLP([[u this ,u article,u written ,u good],

  [u 那个,U 纸,U 好],

  [u 这个,U 什么东西,U 好吃]])

  Print(s.tf) # tf表示术语频率。

  打印(-)

  Print(s.idf) # idf表示反向文档频率。

  打印(-)

  #文本相似度

  打印(s.sim([u article]))

  打印(s.sim([u OK]))

  运行结果如下:

  [{ 这篇文章:1,文章:1,写的:1,好的:1},{ 那篇文章:1,论文:1,好的:1},{ 这个:1,东西:1,好吃。

  -

  这个: 0.5108256237659907,文章:0.5108237659907,写的:0.57765907,好的:0.58875875纸:0.5108256237659907,好的:0.510825237659907,这个:0.5765907,东西:0.576907

  -

  [0.4686473612532025, 0, 0]

  [0,0.534941162205,0] #关于培训

  #现在提供的训练包括分词、词性标注、情感分析,都是使用snownlp库的原始文件。以分词为例,在snownlp/seg目录下分词。

  来自snownlp进口部

  情绪.训练(负txt ,正txt )

  seg.save(seg.marshal )

  #这样将训练好的文件保存为seg.marshal,然后在snownlp/seg/__init__中修改data_path。指向新训练的文件。

  4.NLP测试

  1.检索数据

  爬一些好评、评价、差评的数据,保存在三个txt文件中。

  2.正在处理pathlib导入路径中的数据

  进口熊猫作为pd

  #获取当前目录下存储好评、评价、评价数据的txt。

  p=path(r d:\ python \ pycharm 2020 \ program \ data analysis \中文情感分析)

  review_txt=list(p.glob(**/*)。txt ))

  所有数据=pd。数据帧()

  对于review_txt中的项目:

  Emotion=item.stem #获取文件名中去掉后缀的部分。

  带有路径(项目)。open(mode=r) as f:

  con=f.read()。拆分( \n )

  数据=pd。data frame({ comment content :con, tag: [emotion] * len(con)})

  所有数据=所有数据.追加(数据)

  all _ data . to _ excel( comment data . xlsx ,index=false)

  3.从snownlp导入SnowNLP的NLP测试

  进口熊猫作为pd

  进口re

  df=PD . read _ excel( comment data . xlsx )

  Content=df[评论内容]

  #去掉一些没用的字符,只提取中文。

  内容=[ 。join(re . find all([\ u4e 00-\ u9fa 5]),item,re。s))用于内容中的项目]

  #给每条评论一个情感评分

  分数=[SnowNLP(i)。在内容上对我的感情]

  情感=[]

  #根据分数划定好评、评价和差评

  对于I的分数:

  如果i=0.75:

  Emotions.append(“赞美”)

  elif 0.45=i 0.75:

  Emotions.append(“中期审查”)

  否则:

  Emotions.append(“差评”)

  Df[情感分数]=分数

  情感

  df . to _ excel( NLP post-test data . xlsx )将Panda导入为PD

  #计算预测准确度

  df=PD . read _ excel( xlsx post-test data . xlsx )

  #看准确率。通过设置Snownlp情感评分的梯度得到的情感赞、评价、评价与实际标签进行对比。

  Data=df[df[标签]==df[情感]]

  打印(精度为:{:3%} 。格式(len (data)/len (df)))

  运行结果如下:

  准确率为72.292%。

  以退出代码0结束的过程的精度还可以,但是不高。分析原因可能如下:

  因为我只是做练习,熟悉Snownlp库的基本使用,通过情绪打分和设置渐变来判断情绪,所以没有建立自己的这方面的语料库。如果我建立一个相关的语料库,替换掉默认的语料库,准确率会高很多。因此,语料库非常关键。如果想正式挖掘文本,建议自建语料库。

  这个产品下的评论,中评和差评的界限比较模糊,每条评论的标签都是抓取时的默认标签:属于什么评论,不用人工阅读,会有相当大的误差。

  对文本的处理只是过滤掉其他字符,提取中文。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: