前言

前文给大家说了python机器学习的路径,这光说不练假把式,这次,罗罗攀就带大家完成一个中文文本情感分析的机器学习项目,今天的流程如下:

数据情况和处理

数据情况

这里的数据为大众点评上的评论数据(王树义老师提供),主要就是评论文字和打分。我们首先读入数据,看下数据的情况:import numpy as np

import pandas as pd

data = pd.read_csv('data1.csv')

data.head

情感划分

对star字段看唯一值,打分有1,2,4,5。

中文文本情感分析属于我们的分类问题(也就是消极和积极),这里是分数,那我们设计代码,让分数小于3的为消极(0),大于3的就是积极(1)。

定义一个函数,然后用apply方法,这样就得到了一个新列(数据分析里的知识点)def make_label(star):

if star >3:

return1

else:

return0

data['sentiment']= data.star.apply(make_label)

工具包(snownlp)

我们首先不用机器学习方法,我们用一个第三库(snownlp),这个库可以直接对文本进行情感分析(记得安装),使用方法也是很简单。返回的是积极性的概率。from snownlp importSnowNLP

text1 ='这个东西不错'

text2 ='这个东西很垃圾'

s1 =SnowNLP(text1)

s2 =SnowNLP(text2)

print(s1.sentiments,s2.sentiments)

# result 0.8623218777387431 0.21406279508712744

这样,我们就定义大于0.6,就是积极的,同样的方法,就能得到结果。def snow_result(comemnt):

s =SnowNLP(comemnt)

if s.sentiments >=0.6:

return1

else:

return0

data['snlp_result']= data.comment.apply(snow_result)

上面前五行的结果看上去很差(5个就2个是对的),那到底有多少是对的了?我们可以将结果与sentiment字段对比,相等的我就计数,这样在除以总样本,就能看大概的精度了。counts =0

for i in range(len(data)):

if data.iloc[i,2]== data.iloc[i,3]:

counts+=1

print(counts/len(data))

# result 0.763

朴素贝叶斯

前面利用第三库的方法,结果不是特别理想(0.763),而且这种方法存在一个很大的弊端:针对性差。

什么意思了?我们都知道,不同场景下,语言表达都是不同的,例如这个在商品评价中有用,在博客评论中可能就不适用了。

所以,我们需要针对这个场景,训练自己的模型。本文将使用sklearn实现朴素贝叶斯模型(原理在后文中讲解)。slearn小抄先送上(下文有高清下载地址)。

大概流程为:导入数据

切分数据

数据预处理

训练模型

测试模型

jieba分词

首先,我们对评论数据分词。为什么要分词了?中文和英文不一样,例如:i love python,就是通过空格来分词的;我们中文不一样,例如:我喜欢编程,我们要分成我/喜欢/编程(通过空格隔开),这个主要是为了后面词向量做准备。import jieba

def chinese_word_cut(mytext):

return' '.join(jieba.cut(mytext))

data['cut_comment']= data.comment.apply(chinese_word_cut)

划分数据集

分类问题需要x(特征),和y(label)。这里分词后的评论为x,情感为y。按8:2的比例切分为训练集和测试集。X = data['cut_comment']

y = data.sentiment

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=22)

词向量(数据处理)

电脑是没法识别文字的,只能识别数字。那文本怎么处理了,最简单的就是词向量。什么是词向量,我们通过一个案例来说明下,下面是我们的文本:I love the dog

I hate the dog

简单的说,词向量就是我们将整个文本出现的单词一一排列,然后每行数据去映射到这些列上,出现的就是1,没出现就是0,这样,文本数据就转换成了01稀疏矩阵(这也是上文中文分词的原因,这样一个词就是一个列)。

好在,sklearn中直接有这样的方法给我们使用。CountVectorizer方法常用的参数:max_df:在超过这一比例的文档中出现的关键词(过于平凡),去除掉。

min_df:在低于这一数量的文档中出现的关键词(过于独特),去除掉。

token_pattern:主要是通过正则处理掉数字和标点符号。

stop_words:设置停用词表,这样的词我们就不会统计出来(多半是虚拟词,冠词等等),需要列表结构,所以代码中定义了一个函数来处理停用词表。from sklearn.feature_extraction.text importCountVectorizer

def get_custom_stopwords(stop_words_file):

with open(stop_words_file)as f:

stopwords = f.read

stopwords_list = stopwords.split('\n')

custom_stopwords_list =[i for i in stopwords_list]

return

stop_words_file ='哈工大停用词表.txt'

stopwords = get_custom_stopwords(stop_words_file)

vect =CountVectorizer(max_df =0.8,

min_df =3,

token_pattern=u'(?u)\\b[^\\d\\W]\\w+\\b',

stop_words=frozenset(stopwords))

如果想看到底出来的是什么数据,可通过下面代码查看。test = pd.DataFrame(vect.fit_transform(X_train).toarray, columns=vect.get_feature_names)

test.head

训练模型

训练模型,很简单,用的是朴素贝叶斯算法,结果为0.899,比之前的snownlp好很多了。from sklearn.naive_bayes importMultinomialNB

nb =MultinomialNB

X_train_vect = vect.fit_transform(X_train)

nb.fit(X_train_vect, y_train)

train_score = nb.score(X_train_vect, y_train)

print(train_score)

# result 0.899375

测试数据

当然,我们需要测试数据来验证精确度了,结果为0.8275,精度还是不错的。X_test_vect = vect.transform(X_test)

print(nb.score(X_test_vect, y_test))

# result 0.8275

当然,我们也可以将结果放到data数据中:X_vec = vect.transform(X)

nb_result = nb.predict(X_vec)

data['nb_result']= nb_result

样本量少

模型没调参

没有交叉验证

代码下载:https://github.com/panluoluo/crawler-analysis,下载完整数据和代码。

python情感分析模型_Python有趣|中文文本情感分析相关推荐

  1. python 文本分析库_Python有趣|中文文本情感分析

    前言 前文给大家说了python机器学习的路径,这光说不练假把式,这次,罗罗攀就带大家完成一个中文文本情感分析的机器学习项目,今天的流程如下: 数据情况和处理 数据情况 这里的数据为大众点评上的评论数 ...

  2. python情感分析中文_Python有趣|中文文本情感分析

    前言 前文给大家说了python机器学习的路径,这光说不练假把式,这次,罗罗攀就带大家完成一个中文文本情感分析的机器学习项目,今天的流程如下: 数据情况和处理 数据情况 这里的数据为大众点评上的评论数 ...

  3. python中文文本分析_Python有趣|中文文本情感分析

    前言 前文给大家说了python机器学习的路径,这光说不练假把式,这次,罗罗攀就带大家完成一个中文文本情感分析的机器学习项目,今天的流程如下: 数据情况和处理 数据情况 这里的数据为大众点评上的评论数 ...

  4. NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码

    NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码 目录 全部代码 相关文章 NLP之情感分析:基于python编程(jieba库)实现中文文本情 ...

  5. NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码

    NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码 目录 全部代码 相关文章 NLP之TEA:基于python编程(jieba库)实现中文文本情感分 ...

  6. ​​​​​​​NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)

    NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分) 目录 输出结果 设计思路 相关资料 1.关于代码 2.关于数据集 关于留言 1.留言内容的注意事项 2.如 ...

  7. python snownlp了解_python做snowNLP文本情感分类代码示例

    一.snowNLP简介和作用 snownlp为python版的文本分析工具.是受到了TextBlob的启发而写的,可以方便的处理中文文本内容. 支持的中文自然语言操作包括: 中文分词 词性标注 情感分 ...

  8. python中文文本情感分析

    目录 python中文文本情感分析 导语 训练模型保存并测试正确率 使用保存的模型 python中文文本情感分析 导语 要做一个项目要用到中文文本情感分析,查找了多种资料,在网上看了很多博客后,终于完 ...

  9. Python:snownlp中文文本情感分析

    hello,大家好,我是wangzirui32,今天来教大家如何使用snownlp的中文文本情感分析功能,开始学习吧! 1. pip 安装 命令: pip install snownlp -i htt ...

最新文章

  1. 独木舟上的旅行http://acm.nyist.net/JudgeOnline/problem.php?pid=71
  2. vmware中的Ubuntu安装ssh全家桶(解决connect to host localhost port 22: Connection refused)...
  3. c++ 为什么要按它们声明的顺序初始化成员变量?
  4. 【译】Googler如何解决编程问题
  5. SrpingMVC 映射方法中参数之value,param,同时使用出现的问题
  6. 西瓜书+实战+吴恩达机器学习(二三)EM算法和变分推断
  7. Linux内核分析第一周——计算机是如何工作的
  8. python语言-python语言基本语句用法总结
  9. accp8.0转换教材第4章MySQL高级查询(二)理解与练习
  10. 企业BI项目蓝图规划建设方案
  11. ubuntu服务器系统进入安全模式,ubuntu bios 无法进入安全模式
  12. 计算机word怎么写,电脑word怎么用?
  13. subtype,supertype 与 subclass,superclass 的异同
  14. 智能生活 App SDK 开发入门教程【内附代码段 】
  15. XP系统封装常用工具.ISO
  16. 2023年东南亚用户比较喜欢的社交媒体平台有哪些?
  17. MCAL_VADC配置
  18. 【机器学习】LayerNorm BatchNorm的作用以及区别
  19. java初中级面试题集锦
  20. 把pdf转换成ppt的软件

热门文章

  1. ALSA中amixer、aplay、arecord(三)
  2. Emacs代码补全之ycmd
  3. git显示分支关系图
  4. JoyStick for android2.3 游戏手柄功能开发
  5. Android5.1--电源管理之省电模式分析
  6. RabbitMQ之安装windows
  7. C#之Bcd码时间转成ToDateTime
  8. delphi 异步 调用 带参数_Dubbo 关于同步/异步调用的几种方式
  9. ssh 免密登录 ssh互信 ssh登录到linux服务器不需要输入密码
  10. 如何安装PyCharm【图文详解】