情感分析-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实现简单的文本情感分析
【9月更文挑战第13天】本文将介绍如何使用Python编程语言进行基础的文本情感分析。我们将通过一个简单的例子,展示如何利用自然语言处理库nltk和机器学习库sklearn来实现对文本数据的情感倾向性判断。文章旨在为初学者提供一个入门级的指导,帮助他们理解并实践文本情感分析的基本步骤和方法。
61 6
|
7月前
|
数据采集 自然语言处理 Serverless
使用Gensim库进行情感分析
【4月更文挑战第21天】使用Gensim进行情感分析,首先安装Gensim库(`pip install gensim`),然后导入所需模块,包括Word2Vec和KeyedVectors。对数据进行预处理,如分词和去除停用词。训练Word2Vec模型并保存,或加载预训练模型。最后,定义函数计算句子情感分数,并应用到文档上。代码示例展示了基本流程,实际应用中可按需调整。
99 10
|
7月前
|
数据采集 机器学习/深度学习 人工智能
Python实现文本情感分析
Python实现文本情感分析
101 1
|
7月前
|
自然语言处理 Python
使用Python实现文本分类与情感分析模型
使用Python实现文本分类与情感分析模型
112 1
|
7月前
|
存储 机器学习/深度学习 算法
用Rapidminer做文本挖掘的应用:情感分析
用Rapidminer做文本挖掘的应用:情感分析
|
机器学习/深度学习 自然语言处理
NLP5:NLTK词性标注
NLP5:NLTK词性标注
163 0
|
自然语言处理 Python
【NLP Tool -- NLTK】NLTK进行英文情感分析、分词、分句、词性标注(附代码)
NLP自然语言处理之NLTK工具的使用,进行英文情感分析、分词、分句、词性标注(附代码)
1083 0
|
机器学习/深度学习 自然语言处理 算法
SnowNLP使用自定义语料进行模型训练(情感分析)
SnowNLP使用自定义语料进行模型训练(情感分析)
1876 1
SnowNLP使用自定义语料进行模型训练(情感分析)
|
机器学习/深度学习 缓存 监控
瞎聊深度学习——IMDB影评文本分类
瞎聊深度学习——IMDB影评文本分类
|
机器学习/深度学习 自然语言处理 监控
情感分析 下|学习笔记
快速学习情感分析 下
情感分析 下|学习笔记