博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
主题提取_自己的代码
阅读量:7078 次
发布时间:2019-06-28

本文共 2878 字,大约阅读时间需要 9 分钟。

def cmp(e1,e2):     #输出关键词,按照关键词的计算分值排序,在得分相同,根据关键词排序     import numpy as np     res=np.sign(e1[1]-e2[1])     if res!=0:         return res     else:         a=e1[0]+e2[0]         b=e2[0]+e1[0]         if a>b:             return 1         elif a==b:             return 0         else:             return -1 def calsim(l1,l2):     a,b,c=0.0,0.0,0.0     for t1,t2 in zip(l1,l2):         x1=t1[1]         x2=t2[1]         a+=x1*x1         b+=x1*x1         c+=x2*x2     sim=a/math.sqrt(b*c) if not (b*c)==0.0 else 0.0     return sim
#主题模型 class TopicModel(object):     def __init__(self,doc_list,keyword_num,model='LSI',num_topics=4):         #三个传入参数:处理后的数据集,关键词数量,具体模型(LSI,LDA),主题数量         #使用gensim接口,将文本转为向量表示         #先构建词空间         self.dictionary=corpora.Dictionary(doc_list)         #使用BOW模型向量化         corpus=[self.dictionary.doc2bow(doc)for doc in doc_list]         #对每个词,根据tf-idf进行加权,得到加权后的向量表示         self.tfidf_model=models.TfidfModel(corpus)         self.corpus_tfidf=self.tfidf_model[corpus]         self.keyword_num=keyword_num         self.num_topics=num_topics         #选择加载的模型         if model=='LSI':             self.model=self.train_lsi()         else:             self.model=self.train_lda()         #得到数据集的主题-词分布     def train_lsi(self):         lsi=models.LsiModel(self.corpus_tfidf,id2word=self.dictionary,num_topics=self.num_topics)         return lsi     def train_lda(self):         lda=models.LdaModel(self.corpus_tfidf,id2word=self.dictionary,num_topics=self.num_topics)         return lda     def get_wordtopic(self,word_dict):         wordtopic_dict={}         for word in word_dict:             single_list=[word]             wordcorus=self.tfidf_model[self.dictionary.doc2bow(single_list)]             wordtopic=self.model[wordcorus]             wordtopic_dict[word]=wordtopic         print('wordtopic_dict',wordtopic_dict)         return wordtopic_dict     def get_simword(self,word_list):         #计算词的分布和文档的分布相似度,取相似度最高的keyword_num个词作为主题词         #TF-IDF变换         sentcorpus=self.tfidf_model[self.dictionary.doc2bow(word_list)]         senttopic=self.model[sentcorpus]         #余弦相似度         #计算输入文本和每个主题词的相似度         sim_dict={}         self.wordtopic_dict=self.get_wordtopic(word_list)         for k,v in self.wordtopic_dict.items():             if k not in word_list:                 continue             sim=calsim(v,senttopic)             sim_dict[k]=sim         print('sim_dict',sim_dict)         key_word=[]         for k,v in sorted(sim_dict.items(),key=functools.cmp_to_key(cmp),reverse=True)[:self.keyword_num]:             key_word.append(k)         return key_word
def topic_extract(word_list,model,pos=False,keyword_num=5):     doc_list=load_data(pos)     topic_model=TopicModel(doc_list,keyword_num,model=model)     result=topic_model.get_simword(word_list)     return result

转载于:https://www.cnblogs.com/hapyygril/p/9970432.html

你可能感兴趣的文章
IT谁谁说女子不如男行业
查看>>
[全国首发]Swift视频教程
查看>>
矩阵的压缩存储
查看>>
u-boot中添加mtdparts支持以及Linux的分区设置
查看>>
Spring AOP入门——概念和注意事项
查看>>
C#抽象类其中创建一个静态方法
查看>>
在matlab中进行地理坐标和像素坐标的相互转换
查看>>
HttpContext.Current.Cache 和 HttpRuntime.Cache 区别
查看>>
Android分析应用程序的构建过程
查看>>
发布了Android的App,我要开源几个组件!
查看>>
EXCELL中怎么将两列数据对比,找出相同的和不同的数据?
查看>>
(算法)宝石升级问题
查看>>
Android 中的接口回调
查看>>
LPC-Link2 CMSIS-DAP firmware source
查看>>
hdu 5438 Ponds 拓扑排序
查看>>
NSArray 利用数组创建数组
查看>>
PHP 对象和引用总结
查看>>
linux网络编程投票
查看>>
spring EL表达式,null-safe表达式
查看>>
系列文章--Python Web编程
查看>>