我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

关于词频统计功能,苏南大叔也写过几篇文章了。有现成的CountVectorizer可以使用,也可以手工统计词频。TF就是说对应词在本文中出现的次数概率,越高越好。IDF就是说对应词在其它对比文章中,出现的概率越少越好。本文使用snownlp来完成这个TFIDF的统计需求。同时,输出snownlp赖以成名的情感指数,看看效果如何。

苏南大叔:snownlp情感分析,如何获得TF和IDF的词频统计信息? - tf-idf词频统计
snownlp情感分析,如何获得TF和IDF的词频统计信息?(图2-1)

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文中将试图使用snownlp来统计一下TFIDF信息,以及情感指数sentiments。结果先说一下:惨不忍睹,且听我道来。测试环境:win10python@3.6.8snownlp@0.12.3

已知的TFIDF测试

大家可以参考下面的文章,做相关的词频统计:

由于代码量较大,这里就不做代码回顾分析了。

测试代码

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

苏南大叔:snownlp情感分析,如何获得TF和IDF的词频统计信息? - tf-idf结果
snownlp情感分析,如何获得TF和IDF的词频统计信息?(图2-2)

测试代码二

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

在测试代码一中:
代码的分词结果,看起来还是可以接受。但是TFIDF信息,就完全不能接受了。为啥这里的统计都是以字为单位的?而不是以词为单位?而且分词结果看起来还算正常啊。大家有何见解,欢迎留言。或者是苏南大叔的理解错误,或者是苏南大叔的设置问题?

在测试代码二中:
因为传入的不是一句话,而是以分词为单位的数组。那么,TFIDF信息看起来是能接受的,不过,为啥IDF有取负值的呢?这个算法问题,有待考证。

情感分析指数

这个是snownlp赖以成名的最重要的部分。不过,苏南大叔测试的内容,明显是表达了“不高兴”,结果指数值“0.84”,表示很积极向上,这个问题就有些迷幻操作了。

s.sentiments
测试文字指数
苏南大叔今天很高兴0.9092663197000421
苏南大叔今天很不高兴0.8408882404624718
不高兴0.3693910911319984
不高兴生气0.2086627918123508
测试结果似乎很不靠谱...

相关文章

总结

snownlp测试结果不咋地,更多经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python    nlp