文本挖掘(三)python 基于snownlp做情感分析

  简介:文本挖掘中,情感分析是经常需要使用到,而进行主题模型分析之前,对数据集进行文本分类再进行分析具有必要性,因为分类以后,每一类的主题才会更明显。而snownlp是一个python写的类库,可以方便的处理中文文本内容,主要看上了他的情感分类功能(二分类),分类是基于朴素贝叶斯的文本分类方法,当然也可以选择基于其他方法自己建立一个分词模型。

  目的:学会snownlp基本操作,并使用其做情感分析。

  参考链接:

  官方github

1、基本操作

from snownlp import SnowNLP

s = SnowNLP(u'这个东西真心很赞')   # 中文分词([Character-Based Generative Model](
print('分词结果:',s.words)         
print('词性标注:',s.tags)    
# 情感分析(本分类(Naive Bayes)(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)
print('(输出为positive概率):',s.sentiments)  
print('转换成拼音(Trie树实现的最大匹配):',s.pinyin) 

s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。')
print('繁体转简体(Trie树实现的最大匹配):',s.han)

print('')
print('*'*40)
print('')
text = u'''
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,
所以它与语言学的研究有着密切的联系,但又有重要的区别。
自然语言处理并不是一般地研究自然语言,
而在于研制能有效地实现自然语言通信的计算机系统,
特别是其中的软件系统。因而它是计算机科学的一部分。
'''

s = SnowNLP(text)
print('提取文本关键词([TextRank]:',s.keywords(3))
print('提取文本摘要([TextRank]:',s.summary(3))
print('Tokenization(分割成句子):',s.sentences)

print('')
print('*'*40)
print('')
s = SnowNLP([[u'这篇', u'文章'],
             [u'那篇', u'论文'],
             [u'这个']])
print('tf:',s.tf)
print('idf:',s.idf)
print('文本相似([BM25]:',s.sim([u'文章']))

输出:

分词结果: ['这个', '东西', '真心', '', '']
词性标注: <zip object at 0x0000021C554A49C8>
(输出为positive概率): 0.9769551298267365
转换成拼音(Trie树实现的最大匹配): ['zhe', 'ge', 'dong', 'xi', 'zhen', 'xin', 'hen', 'zan']
繁体转简体(Trie树实现的最大匹配): 「繁体字」「繁体中文」的叫法在台湾亦很常见。

****************************************

提取文本关键词([TextRank]: ['语言', '自然', '计算机']
提取文本摘要([TextRank]: ['因而它是计算机科学的一部分', '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向', '自然语言处理是一门融语言学、计算机科学、数学于一体的科学']
Tokenization(分割成句子): ['自然语言处理是计算机科学领域与人工智能领域中的一个重要方向', '它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法', '自然语言处理是一门融语言学、计算机科学、数学于一体的科学', '因此', '这一领域的研究将涉及自然语言', '即人们日常使用的语言', '所以它与语言学的研究有着密切的联系', '但又有重要的区别', '自然语言处理并不是一般地研究自然语言', '而在于研制能有效地实现自然语言通信的计算机系统', '特别是其中的软件系统', '因而它是计算机科学的一部分']

****************************************

tf: [{'这篇': 1, '文章': 1}, {'那篇': 1, '论文': 1}, {'这个': 1}]
idf: {'这篇': 0.5108256237659907, '文章': 0.5108256237659907, '那篇': 0.5108256237659907, '论文': 0.5108256237659907, '这个': 0.5108256237659907}
文本相似([BM25]: [0.4686473612532025, 0, 0]

2、自定义模型训练

from snownlp import seg   # 分词训练
seg.train('data.txt')
seg.save('seg.marshal')
seg.load('seg.marshal')
from snownlp import tag   # 词性标注训练
tag.train('199801.txt')
tag.save('tag.marshal')
tag.load('tag.marshal')
from snownlp import sentiment  # 文本分类训练,分开两个文件
sentiment.train('neg.txt', 'pos.txt')
sentiment.save('sentiment.marshal')
sentiment.load('sentiment.marshal')

3、使用jieba作为snownlp分词方法

python 舆情分析 nlp主题分析 (2)-结合snownlp与jieba库,提高分词与情感判断 待续

小结

1、同样如果需要对文本文类较为准备,需要准备较大量的数据进行训练。所以,需要物色好的语料库。

2、后续主要运行他的sentiment值进行文本分类做后续分析。

3、下一步找找语料库,自建立文本分类模型。

posted @ 2021-03-10 23:13  forxtz  阅读(2305)  评论(0编辑  收藏  举报