【python】【鱼币福利】基于snownlp情感分析作诗【第二版】
本帖最后由 青出于蓝 于 2022-4-13 20:17 编辑效果图:
https://xxx.ilovefishc.com/album/202204/13/144150q2iozhmzcoerqymh.png
python基础学完后,还是了对python比较有意思的第三方库的学习
之前做了一个python写诗的脚本,效果不错。原作品
那个作品主要是依靠较多数据,随机匹配作诗
而这个作品会加上对情感的分析,保证全诗的感情基调一致
后面会有作品源代码
望大伙多多评分,感谢!!!
snowlnp是一个十分强大的对中文文本分析的一个库,此脚本便依此分析情感
requests 爬取网页,获得诗句
jieba分词
re匹配
pip install 模块名
第三方库使用前需要下载!
这个过程主要依靠requests和re和jieba
爬取出来的数据会用json保存,方便下次使用
具体详见上一个作品
情感分析
进入正题
思路:
1.导入数据
2.分析情感
3.保存结果致列表
我们把分词后的词语进行情感分析,而为什么不直接分析诗句呢?
这是因为如果我们分析词语会更详细,例如送别诗中也不乏有没有负面情绪的词语,要详细分类
这个过程主要用SnowNLP方法,得出的数值如果在0.5以上基本就是积极的情感
那么所有词汇就都被分作两部分了
具体代码
with open("data.json",'r',encoding="utf-8") as f:
data = json.loads(f.read())
qg=[]
for i in data:
a=SnowNLP(i)
sentiments = a.sentiments
qg.append(sentiments)
g=random.randint(0,1)
ps:最后一行 这个g主要是来选择这首诗感情基调为积极还是伤感
然后是匹配诗句
思路:
1,不断随机匹配,如果字数不够就一直匹配
2,如果词汇感情基调与全诗不一致就pass,匹配留下
上代码:while d:
f=""
while True:
if g==0:
c=random.randint(0,len(data)-1)
if len(f)+len(data)>e:
pass
elif qg<=0.5:
pass
else:
f+=data
if len(f)==e:
sj+=(f+" ")
break
else:
c=random.randint(0,len(data)-1)
if len(f)+len(data)>e:
pass
elif qg<=0.5:
f+=data
else:
pass
if len(f)==e:
sj+=(f+" ")
break
d-=1
变量sj即为全诗内容
输出:nn={1:'积极诗',2:"伤感诗"}
print(nn+"\n"+sj))
输出结果:
积极诗
星宿花径收 返斑雪白客 客山河肃清 夜榜响不成
如果想再次检验,可以把每一小句分离,在情感分析
for sj in sj.split():
s = SnowNLP(sj)
sentiments = s.sentiments
print(sentiments)
**** Hidden Message ***** @小甲鱼 @冬雪雪冬 @不二如是 申精谢谢{:10_268:} 需要鱼油回复超过2页才能开始申精哦 不二如是 发表于 2022-4-13 12:50
需要鱼油回复超过2页才能开始申精哦
好的{:10_268:} {:5_95:} {:10_254:} {:5_109:} {:5_109:} 666666666666666 {:5_95:} 好好好 {:10_279:} {:5_109:} {:10_275:} {:5_109:} 6666666666666 加油 {:7_146:} 老哥 你多撒点鱼币给我 我每天帮你顶{:7_137:} {:5_90:}