关闭页面特效

基于Word2vec的诗词多情感分析

1|0Word2vec构造情感字典


1|1基本含义


基于Word2vec的字向量能从大量未标注的普通文本数据中无监督地学习到字向量,而且这些字向量包含了字与字之间的语义关系,正如现实世界中的“物以类聚,类以群分”一样,字可以由它们身边的字来定义。

从原理上讲,基于字嵌入的Word2vec是指把一个维数为所有字的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单字被映射为实数域上的向量。把每个单字变成一个向量,目的还是为了方便计算,比如“求单字A的同义字”,就可以通过“求与单字A在cos距离下最相似的向量”来做到。相关案例可参看《作为一个合格的“增长黑客”,你还得重视外部数据的分析!》。下面是基于Word2vec的字向量模型原理示意图。

 

1|2情感字典


首先加载咱们的诗词数据,进行切分,然后用word2vec进行训练

然后将我们需要的七中情感词进行关联词查找,并保存至对应的表中

from gensim import models from gensim.models.word2vec import Word2Vec import os def split_poetry(file='qi_jueju.txt'): all_data=open(file,"r",encoding="utf-8").read() # all_data=all_data.replace(',','').replace('。','') all_data_split=" ".join(all_data) with open("split.txt", "w", encoding='utf-8') as f: f.write(all_data_split) def train_vec(split_file='split.txt'): #word2vec模型 vec_params_file= "vec_params.pkl" #判断切分文件是否存在,不存在进行切分 if os.path.exists(split_file)==False: split_poetry() #读取切分的文件 split_all_data=open(split_file,"r",encoding="utf-8").read().split("\n") #存在模型文件就去加载,返回数据即可 if os.path.exists(vec_params_file): return Word2Vec.load(vec_params_file) #词向量大小:vector_size,构造word2vec模型,字维度107,只要出现一次就统计该字,workers=6同时工作 embedding_num=128 model=Word2Vec(split_all_data,vector_size=embedding_num,min_count=1,workers=6) #保存模型 model.save(vec_params_file) return model if __name__ == '__main__': model=train_vec() emotion=['','','','','','',''] em_list={} for e in emotion: res = model.wv.most_similar(e, topn=100) lists=[] lists.append(e) for item in res: print(item[0] + "," + str(item[1])) lists.append(item[0]) em_list[e]=",".join(lists) import xlwt xl = xlwt.Workbook() # 调用对象的add_sheet方法 sheet1 = xl.add_sheet('sheet1', cell_overwrite_ok=True) sheet1.write(0, 0, "emotion") sheet1.write(0, 1, 'similar') i=0 for k in em_list.keys(): sheet1.write(i + 1, 0, emotion[i]) sheet1.write(i + 1, 1, em_list[k]) i+=1 xl.save("emotion.xlsx")

结果:

 

1|3 情感分析


任选一首古诗,对其进行单句切分,分析每个句子的情感,然后进行汇总,预测整首诗的情感

import pandas as pd def emotion(): data=pd.read_excel('emotion.xlsx') similar=data.get('similar') sad_list=str(similar[0]).split(',') fear_list=str(similar[1]).split(',') happy_list=str(similar[2]).split(',') anger_list=str(similar[3]).split(',') think_list=str(similar[4]).split(',') like_list=str(similar[5]).split(',') worry_list=str(similar[6]).split(',') return sad_list,fear_list,happy_list,anger_list,think_list,like_list,worry_list def test_sentence(sentence): sad_list, fear_list, happy_list, anger_list, think_list, like_list, worry_list=emotion() sad=fear=happy=anger=think=like=worry=0 for k in sentence: if k in sad_list: sad+=1 elif k in fear_list: fear+=1 elif k in happy_list: happy+=1 elif k in anger_list: anger+=1 elif k in think_list: think+=1 elif k in like_list: like+=1 elif k in worry_list: worry+=1 ans=max(sad,fear,happy,anger,think,like,worry) scord_list=[] scord_list.append(sad) scord_list.append(fear) scord_list.append(happy) scord_list.append(anger) scord_list.append(think) scord_list.append(like) scord_list.append(worry) emotion_list=['','','','','','',''] i=0 for i in range(len(scord_list)): if scord_list[i]==ans: print(emotion_list[i]) break return emotion_list[i] def read(): data=pd.read_excel('tang.xlsx') content_list=data.get('content') for i in range(len(content_list)): content=content_list[i].replace('\n','') ans_content=[] content_l=str(content).split('') for k in content_l: kk=str(k).split('') for it in kk: if it!='': ans_content.append(it) ans_emotion = {} for sentence in ans_content: print(sentence) emot=test_sentence(sentence) if emot not in ans_emotion.keys(): ans_emotion[emot] = 1 else: ans_emotion[emot]+=1 print(sorted(ans_emotion.items(), key=lambda item: item[1], reverse=True)) ans_emotion=dict(sorted(ans_emotion.items(), key=lambda item: item[1], reverse=True)) for key,value in ans_emotion.items(): print('整篇文章情感:'+key) break break if __name__ == '__main__': read()

例如:宗武生日

 

 原诗鉴赏:

 

 

还是比较吻合的


__EOF__

作  者清风紫雪
出  处https://www.cnblogs.com/xiaofengzai/p/15696034.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   清风紫雪  阅读(1347)  评论(4编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
1
0
关注
跳至底部
点击右上角即可分享
微信分享提示