情感分析-SnowNLP

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

SnowNLP库介绍


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


安装命令

pip install snownlp

主要用法


# 导入SnowNLP库
from snownlp import SnowNLP
# 需要操作的句子
text = '你站在桥上看风景,看风景的人在楼上看你。明月装饰了你的窗子,你装饰了别人的梦'
s = SnowNLP(text)
# 分词
print(s.words)

主要功能

中文分词(Character-Based Generative Model)

词性标注(TnT 3-gram 隐马)

情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)

文本分类(Naive Bayes)

转换成拼音(Trie树实现的最大匹配)

繁体转简体(Trie树实现的最大匹配)

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

提取文本摘要(TextRank算法)

tf,idf(信息衡量)

Tokenization(分割成句子)

文本相似(BM25)
from snownlp import SnowNLP
text = '李达康就是这样的人,她穷哭出声,不攀龙附凤,不结党营私,不同流合污,不贪污受贿,也不伪造政绩,手下贪污出事了他自责用人不当,服装厂出事了他没想过隐瞒,後面這些是繁體字'
s = SnowNLP(text)
# 一、分词
print(s.words)
# ['李', '达康', '就', '是', '这样', '的', '人', ',', '她穷', '哭出', '声', ',', '不', '攀龙', '附', '凤', ',', '不结', '党', '营私', ',', '不同', '流', '合', '污', ',', '不', '贪污', '受贿', ',', '也', '不', '伪造', '政绩', ',', '手下', '贪污', '出事', '了', '他', '自', '责', '用人', '不当', ',', '服装厂', '出事', '了', '他', '没', '想过', '隐瞒', ',', '後面', '這些', '是', '繁', '體字']
# 二、词性标注
tags = [x for x in s.tags]
print(tags)
# [('李', 'nr'), ('达康', 'nr'), ('就', 'd'), ('是', 'v'), ('这样', 'r'), ('的', 'u'), ('人', 'n'), (',', 'w'), ('她穷', 'Rg'), ('哭出', 'Rg'), ('声', 'q'), (',', 'w'), ('不', 'd'), ('攀龙', 'Vg'), ('附', 'v'), ('凤', 'Ng'), (',', 'w'), ('不结', 'vvn'), ('党', 'n'), ('营私', 'Bg'), (',', 'w'), ('不同', 'a'), ('流', 'Ng'), ('合', 'v'), ('污', 'Ng'), (',', 'w'), ('不', 'd'), ('贪污', 'v'), ('受贿', 'v'), (',', 'w'), ('也', 'd'), ('不', 'd'), ('伪造', 'v'), ('政绩', 'n'), (',', 'w'), ('手下', 'n'), ('贪污', 'v'), ('出事', 'v'), ('了', 'u'), ('他', 'r'), ('自', 'p'), ('责', 'Ng'), ('用人', 'v'), ('不当', 'a'), (',', 'w'), ('服装厂', 'n'), ('出事', 'v'), ('了', 'u'), ('他', 'r'), ('没', 'd'), ('想过', 'ad'), ('隐瞒', 'v'), (',', 'w'), ('後面', 'Rg'), ('這些', 'Rg'), ('是', 'v'), ('繁', 'Rg'), ('體字', 'Rg')]
# 三、断句
print(s.sentences) # ['李达康就是这样的人', '她穷哭出声', '不攀龙附凤', '不结党营私', '不同流合污', '不贪污受贿', '也不伪造政绩', '手下贪污出事了他自责用人不当', '服装厂出事了他没想过隐瞒', '後面這些是繁體字']
# 四、情绪判断,返回值为正面情绪的概率,越接近1表示正面情绪,越接近0表示负面情绪
text1 = '这部电影真心棒,全程无尿点'
text2 = '这部电影简直烂到爆'
s1 = SnowNLP(text1)
s2 = SnowNLP(text2)
print(text1, s1.sentiments) # 这部电影真心棒,全程无尿点 0.9842572323704297
print(text2, s2.sentiments) # 这部电影简直烂到爆 0.0566960891729531
# 五、拼音
print(s.pinyin)
# ['li', 'da', 'kang', 'jiu', 'shi', 'zhe', 'yang', 'de', 'ren', ',', 'ta', 'qiong', 'ku', 'chu', 'sheng', ',', 'bu', 'pan', 'long', 'fu', 'feng', ',', 'bu', 'jie', 'dang', 'ying', 'si', ',', 'bu', 'tong', 'liu', 'he', 'wu', ',', 'bu', 'tan', 'wu', 'shou', 'hui', ',', 'ye', 'bu', 'wei', 'zao', 'zheng', 'ji', ',', 'shou', 'xia', 'tan', 'wu', 'chu', 'shi', 'liao', 'ta', 'zi', 'ze', 'yong', 'ren', 'bu', 'dang', ',', 'fu', 'zhuang', 'chang', 'chu', 'shi', 'liao', 'ta', 'mo', 'xiang', 'guo', 'yin', 'man', ',', '後', 'mian', '這', 'xie', 'shi', 'fan', '體', 'zi']
# 六、繁体转简体
print(s.han) # 李达康就是这样的人,她穷哭出声,不攀龙附凤,不结党营私,不同流合污,不贪污受贿,也不伪造政绩,手下贪污出事了他自责用人不当,服装厂出事了他没想过隐瞒,后面这些是繁体字
# 七、关键字抽取
text3 = '''
北京故宫 是 中国 明清两代 的 皇家 宫殿 , 旧 称为 紫禁城 , 位于 北京 中轴线 的 中心 , 是 中国 古代 宫廷 建筑 之 精华 。 北京故宫 以 三 大殿 为 中心 , 占地面积 72 万平方米 , 建筑面积 约 15 万平方米 , 有 大小 宫殿 七十 多座 , 房屋 九千余 间 。 是 世界 上 现存 规模 最大 、 保存 最为 完整 的 木质 结构 古建筑 之一 。 
北京故宫 于 明成祖 永乐 四年 ( 1406 年 ) 开始 建设 , 以 南京 故宫 为 蓝本 营建 , 到 永乐 十八年 ( 1420 年 ) 建成 。 它 是 一座 长方形 城池 , 南北 长 961 米 , 东西 宽 753 米 , 四面 围有 高 10 米 的 城墙 , 城外 有 宽 52 米 的 护城河 。 紫禁城 内 的 建筑 分为 外朝 和内廷 两 部分 。 外朝 的 中心 为 太和殿 、 中和殿 、 保和殿 , 统称 三 大殿 , 是 国家 举行 大 典礼 的 地方 。 内廷 的 中心 是 乾清宫 、 交泰 殿 、 坤宁宫 , 统称 后 三宫 , 是 皇帝 和 皇后 居住 的 正宫 。   [ 1 ]   
北京故宫 被誉为 世界 五大 宫之首 ( 法国 凡尔赛宫 、 英国 白金汉宫 、 美国白宫 、 俄罗斯 克里姆林宫 ) , 是 国家 AAAAA 级 旅游 景区 ,   [ 2 - 3 ]     1961 年 被 列为 第一批 全国 重点 文物保护 单位 ;   [ 4 ]     1987 年 被 列为 世界 文化遗产 。   [ 5 ]   
2012 年 1 月 至 2018 年 6 月 , 故宫 累计 接待 观众 达到 1 亿人次 。 2019 年 起 , 故宫 将 试行 分 时段 售票   [ 6 ]     。 2018 年 9 月 3 日 , 故宫 养心殿 正式 进入 古建筑 研究性 保护 修缮 工作 的 实施 阶段 。   [ 7 ]     2019 年 3 月 4 日 , 故宫 公布 了 2019 年 下半年 展览 计划 。   [ 8 ]   
'''
s = SnowNLP(text3)
print(s.keywords(limit=10)) # ['故宫', '年', '米', '外', '中心', '世界', '建筑', '北京', '宫', '保护']
# 八、概括总结文章
print(s.summary(limit=4)) # ['北京故宫 以 三 大殿 为 中心', '2012 年 1 月 至 2018 年 6 月', '[ 7 ]     2019 年 3 月 4 日', '北京故宫 于 明成祖 永乐 四年 ( 1406 年 ) 开始 建设']
# 九、信息衡量
'''
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
TF词频越大越重要,但是文中会的“的”,“你”等无意义词频很大,却信息量几乎为0,这种情况导致单纯看词频评价词语重要性是不准确的。因此加入了idf
IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t越重要
TF-IDF综合起来,才能准确的综合的评价一词对文本的重要性。
'''
s = SnowNLP([
    ['性格', '善良'],
    ['温柔', '善良', '善良'],
    ['温柔', '善良'],
    ['好人'],
    ['性格', '善良'],
])
print(s.tf) # [{'性格': 1, '善良': 1}, {'温柔': 1, '善良': 2}, {'温柔': 1, '善良': 1}, {'好人': 1}, {'性格': 1, '善良': 1}]
print(s.idf) # {'性格': 0.33647223662121295, '善良': -1.0986122886681098, '温柔': 0.33647223662121295, '好人': 1.0986122886681098}
# 十、文本相似性
print(s.sim(['温柔'])) # [0, 0.2746712135683371, 0.33647223662121295, 0, 0]
print(s.sim(['善良'])) # [-1.0986122886681098, -1.3521382014376737, -1.0986122886681098, 0, -1.0986122886681098]
print(s.sim(['好人'])) # [0, 0, 0, 1.4175642434427222, 0]


关于训练

 现在提供训练的包括分词,词性标注,情感分析

from snownlp import seg
seg.train('data.txt')
seg.save('seg.marshal')
# from snownlp import tag
# tag.train('199801.txt')
# tag.save('tag.marshal')
# from snownlp import sentiment
# sentiment.train('neg.txt', 'pos.txt')
# sentiment.save('sentiment.marshal')
# 这样训练好的文件就存储为seg.marshal了,之后修改snownlp/seg/__init__.py里的data_path指向刚训练好的文件即可
目录
相关文章
|
3月前
|
自然语言处理 算法 数据挖掘
基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp
本文介绍了一个基于Python的情感分析和聚类分析项目,使用snownlp库对豆瓣电影评论进行情感分析,并采用手肘法辅助K-means算法进行聚类分析,以探索评论中的不同主题和情感集群。
基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
Python自然语言处理实战:文本分类与情感分析
本文探讨了自然语言处理中的文本分类和情感分析技术,阐述了基本概念、流程,并通过Python示例展示了Scikit-learn和transformers库的应用。面对多义性理解等挑战,研究者正探索跨域适应、上下文理解和多模态融合等方法。随着深度学习的发展,这些技术将持续推动人机交互的进步。
275 1
|
6月前
|
数据采集 自然语言处理 Serverless
使用Gensim库进行情感分析
【4月更文挑战第21天】使用Gensim进行情感分析,首先安装Gensim库(`pip install gensim`),然后导入所需模块,包括Word2Vec和KeyedVectors。对数据进行预处理,如分词和去除停用词。训练Word2Vec模型并保存,或加载预训练模型。最后,定义函数计算句子情感分数,并应用到文档上。代码示例展示了基本流程,实际应用中可按需调整。
83 10
|
6月前
|
自然语言处理 Python
使用Python实现文本分类与情感分析模型
使用Python实现文本分类与情感分析模型
100 1
|
6月前
|
人工智能 自然语言处理 API
自然语言处理:Python中的文本分析与情感分析
【4月更文挑战第12天】本文介绍了Python在自然语言处理(NLP)中的应用,重点关注文本分析和情感分析。Python有两大常用NLP库:NLTK和spaCy,前者提供丰富的处理工具,后者则以高速和精确著称。情感分析方面,推荐TextBlob和VADER,前者简单易用,后者擅长分析社交媒体文本。基本流程包括文本预处理(如去除停用词)、使用库进行分析(如spaCy的词性标注和命名实体识别)和情感分析(如TextBlob的情感评分)。通过学习和实践,可以提升Python NLP技能。
255 2
|
6月前
|
机器学习/深度学习 数据采集 自然语言处理
利用Python实现基于自然语言处理的情感分析
本文将介绍如何利用Python编程语言,结合自然语言处理技术,实现情感分析。通过对文本数据进行情感分析,可以帮助我们了解用户对产品、服务或事件的情感倾向,为市场调研和舆情分析提供有力支持。文章将涵盖文本预处理、情感词典构建以及情感分析模型的搭建与应用等内容,旨在帮助读者深入理解情感分析的原理和实践应用。
|
6月前
|
存储 机器学习/深度学习 算法
用Rapidminer做文本挖掘的应用:情感分析
用Rapidminer做文本挖掘的应用:情感分析
|
6月前
|
存储 机器学习/深度学习 自然语言处理
R语言自然语言处理(NLP):情感分析新闻文本数据
R语言自然语言处理(NLP):情感分析新闻文本数据
|
12月前
|
机器学习/深度学习 自然语言处理
NLP5:NLTK词性标注
NLP5:NLTK词性标注
147 0
|
自然语言处理 Python
【NLP Tool -- NLTK】NLTK进行英文情感分析、分词、分句、词性标注(附代码)
NLP自然语言处理之NLTK工具的使用,进行英文情感分析、分词、分句、词性标注(附代码)
858 0