NLP之中文自然语言处理工具库:SnowNLP(情感分析/分词/自动摘要)

作者:虚坏叔叔
博客:https://xuhss.com

早餐店不会开到晚上,想吃的人早就来了!

一 安装与介绍

1.1 概述

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

1.2 特点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LEHKAWvQ-1674960434955)(https://img2018.cnblogs.com/blog/1173617/201905/1173617-20190505151012809-670304442.png)]

# s as SnowNLP(text)1) s.words词语2) s.sentences 句子/分句3) s.sentiments 情感偏向,0-1之间的浮点数,越靠近1越积极(正面)4) s.pinyin 转为拼音5) s.han 转为简体6) s.keywords(n) 提取关键字,n默认为57) s.summary(n)提取摘要,n默认为58) s.tf 计算term frequency词频9) s.idf 计算inverse document frequency逆向文件频率10) s.sim(doc,index)计算相似度

1.3 安装

pip install snownlp

二 模块解析

2.1 seg [分词模块]

分词库仍以jieba的中文分词效果最佳。
个人认为:jieba(多种分词模式/用户可自定义领域词汇) / pynlpir (二者可结合) >> snownlp

from snownlp import segfrom snownlp import SnowNLPs = SnowNLP(u"今天我很快乐。你怎么样呀?");print("[words]",s.words); # 分词seg.train(trainDataFileOfPath); # 训练用户提供的自定义的新的训练分词词典的数据集seg.save(targetDir+'seg2.marshal'); #保存训练后的模型print(seg.data_path) # 查看 or 设置snownlp提供的默认分词的词典的路径# [output][words] ['今天', '我', '很', '快乐', '。', '你', '怎么样', '呀', '?']D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\seg\seg.marshal 

# 打开其目录seg中的data.txt:/b 向/e 充/b 满/e 希/b 望/e 的/s 新/s 世/b 纪/e中/b 共/m 中/m 央/e 总/b 书/m 记/e# /b代表begin,/m代表middle,/e代表end,分别代表一个词语的开始,中间词和结尾,/s代表single,一个字是一个词的意思

2.2 sentiment [情感分析]

from snownlp import sentimentfrom snownlp import SnowNLPs = SnowNLP(u"今天我很快乐。你怎么样呀?");print("[sentiments]",s.sentiments); #情感性分析sentiment.train(neg1.txt,pos1.txt); # 训练用户提供的自定义的新的训练分词词典的负面情感数据集和正面情感数据集sentiment.save('sentiment2.marshal');#保存训练后的模型print(sentiment.data_path) # 查看 or 设置snownlp提供的默认情感分析模型的路径# [output][sentiments] 0.971889316039116#有博客博友推荐,设定 value>0.6:正面;value < 20%:负面;反之:中性D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\sentiment\sentiment.marshal

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NH0p77zI-1674960434957)(https://img2018.cnblogs.com/blog/1173617/201905/1173617-20190505144122579-664853726.png)]

2.3 summary [文本摘要]

算法基于TextRank。

from snownlp import summaryfrom snownlp import SnowNLPtext=u"https://news.ifeng.com/c/7kdJkIAg 2OO2月26日,四川大学华西医院化妆品评价中心在微信公众号上发布了一条招募信息,希望招募有脱发困扰的试用者,来测试一款防脱育发液产品,该消息很快引发网友关注,北青报记者27日上午从华西医院工作人员处了解到,发布该消息仅一天时间,就已经有8000多人报名,但是医院实际上只需要30名试用者即可。据四川大学华西医院化妆品评价中心发布的消息显示,这次试用者招募有几项目要求,要求试用者年龄为18到60周岁,性别不限,有脱发困扰,目前未参加中心的其他项目。该招募信息称,试用者3月1日到中心领取育发液,回家试用,产品试用期为28天,每周五到中心回访,连续四周,同时,该实验还有相应的报酬。“现在被脱发困扰的人很多,又因为这条信息里有‘脱发’字样,所以很快引起了大家的关注,还上了微博热搜。”华西大学工作人员告诉北青报记者,“我27日上午了解了一下,到目前为止已经有8000多人报名了。”该工作人员表示,这次招募是医院的化妆品评价中心需要为一款产品做测试,需要30名左右的试用者,所以现在有这么多人报名,肯定是需要进行筛选的,“但是现在还无法统计报名的人主要集中地年龄段,不过现在脱发已经有年轻化的趋势,所以应该从18到60岁的报名者都有。这次入选的人会给发放一定的报酬,但是金额应该不会太多,主要是为了解决试用者来医院的交通费用等。”医院工作人员告诉北青报记者,华西医院化妆品评价中心经常会发布一些试用者招募活动,之前这些招募可能并未引起太多人的关注,“这次招募防脱育发液试用者,也让我们的其他招募受到了关注,很多项目都增加了很多报名的试用者。”北青报记者看到,医院的化妆品评价中心之前确实发不过许多试用者招募信息,例如“法国进口改善皮肤暗沉提高皮肤含水量产品招募试用者”、“皮肤封闭式斑贴实验项目志愿者招募”、“男士护肤品免费试用啦”等,对此,有网友表示,“找到了一条免费使用化妆品之路”。";s = SnowNLP(text);print("[summary]",s.summary(3));# [output][summary] ['华西医院化妆品评价中心经常会发布一些试用者招募活动', '医院的化妆品评价中心之前确实发不过许多试用者招募信息', '希望招募有脱发困扰的试用者']

三 快速示例教程

# [code]import osfrom snownlp import SnowNLPfrom snownlp import sentimentfrom snownlp import seg# snownlp - demotext = [u"今天我很快乐。你怎么样呀?",u"苏宁易购,是谁给你们下架OV的勇气",u"恐怖",u"质量不太好"];s = SnowNLP(text[1]) #载入文本print("[words]",s.words); # 分词print("[sentiments]",s.sentiments); #情感性分析for sentence in s.sentences :#分句print("[sentence]",sentence);pass;#sentiment.train('./neg.txt', './pos.txt');# 重新训练语料模型#sentiment.save('sentiment.marshal'); # 保存好新训练的词典模型print("[seg.data_path]",seg.data_path); # 查看seg子模块的词典位置print("[sentiment.data_path]",sentiment.data_path); # 查看sentiment子模块的词典位置#seg.data_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),'sentiment.marshal') # 设置词典位置# [output][words] ['恐怖'][sentiments] 0.293103448275862[sentence] 恐怖[seg.data_path] D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\seg\seg.marshal[sentiment.data_path] D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\sentiment\sentiment.marshal

四 推荐文献

  • NLP之淘宝商品评论情感分析 – 基于SnowNLP – 推荐
  • NLP从入门到喜欢之jieba分词器 – 推荐
  • SnowNLP 中文文本分析器基本用法
  • snownlp 0.12.3 – PYPI – 推荐
  • 利用目前的三个分词工具(jieba、snownlp、pynlpir)简单的实现了短文本的分词效果
  • 使用pynlpir增强jieba分词的准确度

总结

最后的最后
由本人水平所限,难免有错误以及不足之处, 屏幕前的靓仔靓女们 如有发现,恳请指出!

最后,谢谢你看到这里,谢谢你认真对待我的努力,希望这篇博客对你有所帮助!

你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!

往期优质文章分享

  • C++ QT结合FFmpeg实战开发视频播放器-01环境的安装和项目部署
  • 解决QT问题:运行qmake:Project ERROR: Cannot run compiler ‘cl‘. Output:
  • 解决安装QT后MSVC2015 64bit配置无编译器和调试器问题
  • Qt中的套件提示no complier set in kit和no debugger,出现黄色感叹号问题解决(MSVC2017)
  • Python+selenium 自动化 – 实现自动导入、上传外部文件(不弹出windows窗口)

优质教程分享

  • 如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
  • 比如以下几个专栏:Python实战微信订餐小程序、Python量化交易实战、C++ QT实战类项目 和 算法学习专栏
  • 可以学习更多的关于C++/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
学习路线指引(点击解锁)知识定位人群定位
Python实战微信订餐小程序进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
Python量化交易实战入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
❤️ C++ QT结合FFmpeg实战开发视频播放器❤️难度偏高分享学习QT成品的视频播放器源码,需要有扎实的C++知识!
游戏爱好者九万人社区互助/吹水九万人游戏爱好者社区,聊天互助,白嫖奖品
Python零基础到入门Python初学者针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门

资料白嫖,温馨提示

关注下面卡片即刻获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!