snownlp情感分析,如何获得TF和IDF的词频统计信息?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
关于词频统计功能,苏南大叔也写过几篇文章了。有现成的CountVectorizer
可以使用,也可以手工统计词频。TF
就是说对应词在本文中出现的次数概率,越高越好。IDF
就是说对应词在其它对比文章中,出现的概率越少越好。本文使用snownlp
来完成这个TF
和IDF
的统计需求。同时,输出snownlp
赖以成名的情感指数,看看效果如何。
大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文中将试图使用snownlp
来统计一下TF
和IDF
信息,以及情感指数sentiments
。结果先说一下:惨不忍睹,且听我道来。测试环境:win10
,python@3.6.8
,snownlp@0.12.3
。
已知的TF
和IDF
测试
大家可以参考下面的文章,做相关的词频统计:
- 《如何利用CountVectorizer来做词频统计》 https://newsn.net/say/python-count-vectorizer.html
- 《如何手工统计一篇文章的词频Top5分词》 https://newsn.net/say/python-tf.html
- 《用MultinomialNB多项式贝叶斯分类器进行预测》 https://newsn.net/say/sklearn-multinomialnb.html
由于代码量较大,这里就不做代码回顾分析了。
测试代码
from snownlp import SnowNLP
text = "苏南大叔今天很不高兴"
s = SnowNLP(text)
print(s.words)
print(s.tf)
print(s.idf)
print("情感倾向分数:",s.sentiments)
输出:
['苏南', '大叔', '今天', '很', '不', '高兴']
[{'苏': 1}, {'南': 1}, {'大': 1}, {'叔': 1}, {'今': 1}, {'天': 1}, {'很': 1}, {'不': 1}, {'高': 1}, {'兴': 1}]
{'苏': 1.845826690498331, '南': 1.845826690498331, '大': 1.845826690498331, '叔': 1.845826690498331, '今': 1.845826690498331, '天': 1.845826690498331, '很': 1.845826690498331, '不': 1.845826690498331, '高': 1.845826690498331, '兴': 1.845826690498331}
情感倾向分数: 0.8408882404624718
测试代码二
from snownlp import SnowNLP
s = SnowNLP([['苏南大叔', '今天','很','不','高兴','高兴','高兴'],
['其实', '很',"高兴","心情","愉悦","愉悦","开心"],
['开心','笑容满面']])
print(s.tf)
print(s.idf)
输出内容:
[{'苏南大叔': 1, '今天': 1, '很': 1, '不': 1, '高兴': 3}, {'其实': 1, '很': 1, '高兴': 1, '心情': 1, '愉悦': 2, '开心': 1}, {'开心': 1, '笑容满面': 1}]
{'苏南大叔': 0.5108256237659907, '今天': 0.5108256237659907, '很': -0.5108256237659907, '不': 0.5108256237659907, '高兴': -0.5108256237659907, '其实': 0.5108256237659907, '心情': 0.5108256237659907, '愉悦': 0.5108256237659907, '开心': -0.5108256237659907, '笑容满面': 0.5108256237659907}
print(s.sentiments)
情感指数的输出,直接报错:
TypeError: expected string or bytes-like object
词频统计
s.tf
s.idf
在测试代码一中:
代码的分词结果,看起来还是可以接受。但是TF
和IDF
信息,就完全不能接受了。为啥这里的统计都是以字为单位的?而不是以词为单位?而且分词结果看起来还算正常啊。大家有何见解,欢迎留言。或者是苏南大叔的理解错误,或者是苏南大叔的设置问题?
在测试代码二中:
因为传入的不是一句话,而是以分词为单位的数组。那么,TF
和IDF
信息看起来是能接受的,不过,为啥IDF
有取负值的呢?这个算法问题,有待考证。
情感分析指数
这个是snownlp
赖以成名的最重要的部分。不过,苏南大叔测试的内容,明显是表达了“不高兴”,结果指数值“0.84”,表示很积极向上,这个问题就有些迷幻操作了。
s.sentiments
测试文字 | 指数 |
---|---|
苏南大叔今天很高兴 | 0.9092663197000421 |
苏南大叔今天很不高兴 | 0.8408882404624718 |
不高兴 | 0.3693910911319984 |
不高兴生气 | 0.2086627918123508 |
测试结果似乎很不靠谱...
相关文章
- https://newsn.net/say/python-count-vectorizer.html
- https://newsn.net/say/python-tf.html
- https://newsn.net/say/sklearn-multinomialnb.html
- https://newsn.net/say/snownlp-cut.html
- https://newsn.net/say/snownlp-keywords.html
总结
snownlp
测试结果不咋地,更多经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。