昨晚上发现了snownlp这个库,很开心。先说说我开心的原因。我本科毕业设计做的是文本挖掘,用R语言做的,发现R语言对文本处理特别不友好,没有很多强大的库,特别是针对中文文本的,加上那时候还没有学机器学习算法。所以很头疼,后来不得已用了一个可视化的软件RostCM,但是一般可视化软件最大的缺点是无法调参,很死板,准确率并不高。现在研一,机器学习算法学完以后,又想起来要继续学习文本挖掘了。所以前半个月开始了用python进行文本挖掘的学习,很多人都推荐我从《python自然语言处理》这本书入门,学习了半个月以后,可能本科毕业设计的时候有些基础了,再看这个感觉没太多进步,并且这里通篇将nltk库进行英文文本挖掘的,英文文本挖掘跟中文是有很大差别的,或者说学完英文文本挖掘,再做中文的,也是完全懵逼的。所以我停了下来,觉得太没效率了。然后我在网上查找关于python如何进行中文文本挖掘的文章,最后找到了snownlp这个库,这个库是国人自己开发的python类库,专门针对中文文本进行挖掘,里面已经有了算法,需要自己调用函数,根据不同的文本构建语料库就可以,真的太方便了。我只介绍一下这个库具体应用,不介绍其中的有关算法原理,因为算法原理可以自己去学习。因为我在学习这个库的时候,我查了很多资料发现很少或者基本没有写这个库的实例应用,很多都是转载官网对这个库的简介,所以我记录一下我今天的学习。

首先简单介绍一下这个库可以进行哪些文本挖掘。snownlp主要可以进行中文分词(算法是Character-Based Generative Model)、词性标注(原理是TnT、3-gram 隐马)、情感分析(官网木有介绍原理,但是指明购物类的评论的准确率较高,其实是因为它的语料库主要是购物方面的,可以自己构建相关领域语料库,替换原来的,准确率也挺不错的)、文本分类(原理是朴素贝叶斯)、转换拼音、繁体转简体、提取文本关键词(原理是TextRank)、提取摘要(原理是TextRank)、分割句子、文本相似(原理是BM25)。官网还有更多关于该库的介绍,在看我这个文章之前,建议先看一下官网,里面有最基础的一些命令的介绍。官网链接:https://pypi.python.org/pypi/snownlp/0.11.1。

下面正式介绍实例应用。主要是中文文本的情感分析,我今天从京东网站采集了249条关于笔记本的评论文本作为练习数据,由于我只是想练习一下,没采集更多。然后人工标注每条评论的情感正负性,情感正负性就是指该条评论代表了评论者的何种态度,是褒义还是贬义。以下是样例:

其中-1表示贬义,1表示褒义。由于snownlp全部是unicode编码,所以要注意数据是否为unicode编码。因为是unicode编码,所以不需要去除中文文本里面含有的英文,因为都会被转码成统一的编码(补充一下,关于编码问题,我还是不特别清楚,所以这里不多讲,还请对这方面比较熟悉的伙伴多多指教)。软件本身默认的是Ascii编码,所以第一步先设置软件的默认编码为utf-8,代码如下:

1、改变软件默认编码

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

2、然后准备数据

import pandas as pd #加载pandas

text=pd.read_excel(u'F:/自然语言处理/评论文本.xlsx',header=0) #读取文本数据

text0=text.iloc[:,0] #提取所有数据

text1=[i.decode('utf-8') for i in text0] #上一步提取数据不是字符而是object,所以在这一步进行转码为字符

3、训练语料库

from snownlp import sentiment #加载情感分析模块

sentiment.train('E:/Anaconda2/Lib/site-packages/snownlp/sentiment/neg.txt', 'E:/Anaconda2/Lib/site-packages/snownlp/sentiment/pos.txt') #对语料库进行训练,把路径改成相应的位置。我这次练习并没有构建语料库,用了默认的,所以把路径写到了sentiment模块下。

sentiment.save('D:/pyscript/sentiment.marshal')#这一步是对上一步的训练结果进行保存,如果以后语料库没有改变,下次不用再进行训练,直接使用就可以了,所以一定要保存,保存位置可以自己决定,但是要把`snownlp/seg/__init__.py`里的`data_path`也改成你保存的位置,不然下次使用还是默认的。

4、进行预测

from snownlp import SnowNLP

senti=[SnowNLP(i).sentiments for i in text1] #遍历每条评论进行预测

5、进行验证准确率

预测结果为positive的概率,positive的概率大于等于0.6,我认为可以判断为积极情感,小于0.6的判断为消极情感。所以以下将概率大于等于0.6的评论标签赋为1,小于0.6的评论标签赋为-1,方便后面与实际标签进行比较。

newsenti=[]

for i in senti:

if (i>=0.6):

newsenti.append(1)

else:

newsenti.append(-1)

text['predict']=newsenti #将新的预测标签增加为text的某一列,所以现在text的第0列为评论文本,第1列为实际标签,第2列为预测标签

counts=0

for j in range(len(text.iloc[:,0])): #遍历所有标签,将预测标签和实际标签进行比较,相同则判断正确。

if text.iloc[j,2]==text.iloc[j,1]:

counts+=1

print u"准确率为:%f"%(float(counts)/float(len(text)))#输出本次预测的准确率

运行结果为:

准确率还可以,但还不算高,原因是我考虑时间原因,并且我只是练习一下,所以没有自己构建该领域的语料库,如果构建了相关语料库,替换默认语料库,准确率会高很多。所以语料库是非常关键的,如果要正式进行文本挖掘,建议要构建自己的语料库。在没有构建新的语料库的情况下,这个83.9357%的准确率还是不错了。

以上是我这次的学习笔记,和大家分享一下,有不足之处请大家批评指正。我还是一个刚涉世数据挖掘、机器学习、文本挖掘领域不久的小白,有许多知识还是比较模糊,但对这数据挖掘很感兴趣。希望能多结识这方面的朋友,共同学习、共同进步。

转自:博客

snownlp 原理_snownlp入门相关推荐

  1. redis原理快速入门知识点总结

    redis原理快速入门知识点总结 1. 项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 为什么用缓存? 1.高性能: 一些需要复杂操作耗时查出来的结果,且确定后面不怎么变化,但是 ...

  2. TI CC1101学习笔记:工作原理简单入门

    众所周知,在IOT的市场应用中,从通信协议细分的话,有SUB-1G,2.4G,3G, 4G,以及最新推出的5G,虽然5G通信协议已经在崭露头角,但是不同的通信协议在不同的应用领域之中还是占据着一定的重 ...

  3. 编译原理实验入门-Cygwin-Flex-Bison-下载安装+基本操作

    编译原理实验入门 一.实验环境配置-Cygwin-Flex-Bison 1.下载Cygwin 2.双击 3.初始安装\更新\删除\安装其他 二.基本操作Cygwin-Flex-Bison (1)Cyg ...

  4. SpringCloud实战与原理---快速入门

    SpringCloud实战与原理 第一章  快速入门 1. 初始化工程 2. 启动Eureka注册中心 2.1 Eureka注册中心启动代码 2.2 启动Eureka注册中心 3. 注册Eureka客 ...

  5. kafka原理_kafka入门(原理搭建简单使用)

    前言 公司在用kafka接受和发送数据,自己学习过Rabbitmq,不懂kafka挺不爽的,说干就干!网上找了许多帖子,学习了很多,小小的demo自己也搭建起来了,美滋滋,下面我认为优秀的网站和自己的 ...

  6. 【编译原理】入门总结

    教程资源 入门教程在:手把手教你做一个 C 语言编译器 学习过程 19年尝试学了一下,中途看不懂放弃了.20年底从头再看一遍,经过一年的知识积累,在仔细研读之下,终于算是学懂了.此文中记录了我在最初学 ...

  7. c语言电子琴原理,电子琴入门:电子琴内部结构及发声原理

    键盘式电子琴声音丰富.优美,有变音装置,能发出多种不同的音色,可以作为独特的乐器进行演奏,还能代替传统的风琴.钢琴供音乐课教学.传统乐器的声音是通过机械的方法产生的,电子琴的声音是用"电&q ...

  8. ViT(vision transformer)原理快速入门

    本专题需要具备的基础: 了解深度学习分类网络原理. 了解2017年的transformer. Transformer 技术里程碑: ViT简介 时间:2020年CVPR 论文全称:<An Ima ...

  9. c# out原理 ref_3-Unity入门学习之C#基础2「数据类型」

    3-Unity入门学习之C#基础2 一.C#的数据类型 C#中,变量主要包含以下三种类型: 1.1.值类型 1.1.1.值类型介绍 ①结构[struct]:包含(整型.浮点型.128 位数据类型(de ...

  10. 情感分析——深入snownlp原理和实践

    一.snownlp简介 snownlp是什么? SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英 ...

最新文章

  1. tpmc tps oracle,TPS(每秒处理事务数)和TPMC(每分钟处理交易量)
  2. LayoutInflater的inflate函数用法详解
  3. java中String new和直接赋值的区别
  4. 百度景鲲:AI交互正在吃掉旧产品边界,触达移动互联网盲区用户 | MEET2020
  5. 取消管理员取得所有权_企业取得违约补偿款是否一律应缴增值税呢?
  6. 利用Struts拦截器限制上传图片的格式和大小
  7. 趣学python3(28)-pygame-蛇身随机运动(可gameover )
  8. 检测到在集成的托管管道模式下不适用的 ASP.NET 设置, HTTP 错误 500.23 解决方案...
  9. iPhone12再曝光:苹果终于对它的天线动手了
  10. 地壳中元素含量排名记忆口诀_高中化学短周期元素推断题的常见题眼
  11. 必须先说明组件oracle,Oracle Enterprise Manager 组件 说明 .
  12. tomcat端口修改后在Eclipse中启动无效问题解决
  13. js格式化xml并高亮显示关键字
  14. 修改本地文件存储路径
  15. 【AGC005F】Many Easy Problems FFT 容斥原理
  16. UE4官方文档阅读笔记——编程指南
  17. 计算机操作填充柄在哪里,Excel中2010版进行添加自动填充柄的操作方法
  18. LGA1155、LGA1156、LGA1366、LGA2011的CPU插槽对应的都是什么型号的CPU
  19. [CTF] python的pip源更改及常用python库
  20. php 半角全角,php字符串处理之全角半角转换

热门文章

  1. 高斯赛德尔潮流计算c语言编程,高斯赛德尔法潮流计算
  2. ivx中字体显示_Windows 7 中的 SimSun-ExtB 是什么字体,为何与中易宋体 SimSun 显示出来不一样?...
  3. linux64位wps下载授权码,ubuntu15.04安装wps-office的64位版
  4. 最速下降法求解步骤及例题
  5. AdminLTE与php,如何使用Vue整合AdminLTE模板
  6. 收集常用汉字6725个
  7. bt 介绍以及 bt 种子的hash值(特征值)计算
  8. distribute-list分发列表 转自 红茶三杯sina blog
  9. 读书印记 - 《批判性思维工具》
  10. 别找了,这就是你心心念念想要的年会活动抽奖软件