再此之前我一直在寻找情感分析的博客,也看到了有多种情感分析的方法,有用机器学习算法来学习,不过这种方法需要自己标注一些训练数据,这个工作量是很大的,我也研究过nltk包的使用,但研究了半天始终是有关英文的自然语言处理,对于中文来说有些方法不适用,偶然看到snownlp包,专为中文自然语言处理写的工具,就拿来研究了一番,下面就把他的一些功能记录一下,有什么新的功能或是错误的地方请指点,谢谢。
o,在这加点说明,我看其他博主都说要把文本内容转换成Unicode格式,但我在这没有转也运行成功了,我的运行环境是Anaconda+python3.6,此为pycharm中运行的结果。
from snownlp import SnowNLP
import jieba
#snownlp库的使用
#0,情感分析
text_ = "今天我很高兴,今天我很愤怒。"
text0 = "只看楼主大图,收藏离家最近的天街边上最近摆了很多这种盲选盒子收藏最吸引我的当然是号称今天会放出242个苹果,然后,选了一个88号收藏扫码支付领到一个,拿到手有点沉,难道,是个苹果么,收藏打开好失望,一个三无产品玻尿酸和一张抽奖券,"
text1 = "只看楼主大图,昨晚下班之后跟朋友去看电影,路过杭州大厦中央商城,看到一家奈雪,茶,听说这是个网红牌子,刚好朋友有个买一送一对的券,我们就进去了解了一下,看了看价格有点小贵啊,不是有券我也舍不得来吃,收藏本来想点新品霸气车厘子,但是服务员说限量的已经买完了,呵呵,我就点了霸气芝士芒果,芝士是焦盐的,感觉不错,不甜不腻,喝到下面有很多芒果肉,好吃,收藏店里还有卖蛋糕面包的,我们就买了个车厘子面包,朋友说奶油很好吃,不会腻,而且也很软,可以给个赞收藏收藏,7,8,0,0,"
text2 = "新时代家居东面那条路与留祥路石祥路交界处,早上大概7点半左右吧,不止一次了,今天我们又碰到了,一大早在公路上打灰机,你们觉得这种人变态吗,今天我们报警了,结果他逃了,本来想拍个照附带上传,但是他逃到河对面,照相机啊没电了,手机拍不到那么远的,如果有人在那也碰到的话,就马上报警,他骑个电瓶车的,"
s_ = SnowNLP(text_)
#切分成句子
for sentence in s_.sentences:
print(sentence)
#今天我很高兴
#今天我很愤怒
#每个句子的情感得分,这里的分数是指正向情感的概率,看出来结果还是比较好的
s1 = SnowNLP(s_.sentences[0])
s1.sentiments
# 0.6732684101105153
s1 = SnowNLP(s_.sentences[1])
s1.sentiments
# 0.07763913772213482
#整个句子的情感得分
print('情感指数',s_.sentiments)
#情感指数 0.7926514785564073
#1,中文分词
s = SnowNLP('今天天气真的不错。')
print(s.words)
#['今天', '天气', '真的', '不错', '。']
print(jieba.lcut('今天天气真的不错。'))
#['今天天气', '真的', '不错', '。']
'''
在这我和jieba分词进行了比较,snownlp分词能力还是不如jieba,还有后面的词性标注,词频,文本相似,
建议不用这中方法,jieba在词性标注,词频方面做的比这好,至于文本相似也有好多方法,都比这个好,
不管在操作和结果上。可以参考我的另一篇(https://blog.csdn.net/python3_i_know/article/details/86598936)
文本摘要和关键词提取这两个方法还是可以的
'''
#2,词性标注
print(list(s.tags))
#[('今天', 't'), ('天气', 'n'), ('真的', 'd'), ('不错', 'a'), ('。', 'w')]
#3,转成拼音
print(s.pinyin)
#['jin', 'tian', 'tian', 'qi', 'zhen', 'de', 'bu', 'cuo', '。']
#4,繁体转简体
#print(s.han)
#5,提取关键字,默认5个词
text = """
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,
所以它与语言学的研究有着密切的联系,但又有重要的区别。
自然语言处理并不是一般地研究自然语言,
而在于研制能有效地实现自然语言通信的计算机系统,
特别是其中的软件系统。因而它是计算机科学的一部分。
"""
s1 = SnowNLP(text)
print(s1.keywords(3))
#['语言', '自然', '计算机']
#6,文本摘要,默认5句
print(s1.summary(5))
#['因而它是计算机科学的一部分', '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向', '自然语言处理是一门融语言学、计算机科学、数学于一体的科学', '所以它与语言学的研究有着密切的联系', '这一领域的研究将涉及自然语言']
#7,分割成句子
print(s1.sentences)
#['自然语言处理是计算机科学领域与人工智能领域中的一个重要方向', '它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法', '自然语言处理是一门融语言学、计算机科学、数学于一体的科学', '因此', '这一领域的研究将涉及自然语言', '即人们日常使用的语言', '所以它与语言学的研究有着密切的联系', '但又有重要的区别', '自然语言处理并不是一般地研究自然语言', '而在于研制能有效地实现自然语言通信的计算机系统', '特别是其中的软件系统', '因而它是计算机科学的一部分']
#8,词频
print(s.tf)
#[{'今': 1}, {'天': 1}, {'天': 1}, {'气': 1}, {'真': 1}, {'的': 1}, {'不': 1}, {'错': 1}, {'。': 1}]
#9,逆向文件频率,这个我没搞懂它是干什么用的,知道的大佬请指点
print(s.idf)
#{'今': 1.7346010553881064, '天': 1.0986122886681096, '气': 1.7346010553881064, '真': 1.7346010553881064, '的': 1.7346010553881064, '不': 1.7346010553881064, '错': 1.7346010553881064, '。': 1.7346010553881064}
#10,文本相似
print(s.sim(['今']))
#[1.7346010553881066, 0, 0, 0, 0, 0, 0, 0, 0]
另一篇参考jieba模块主要功能