当前位置:   article > 正文

LDA (一) 文本关键词提取_lda关键词提取原理

lda关键词提取原理

一、算法原理:使用gensim自带的LDAmodel。使用方法原理是:候选的关键词与抽取的主题计算相似度并进行排序,得到最终的关键词。关键点,候选关键词和抽取的主题如何计算相似度?最简单的想法是:每个主题由N个单词*概率 的集合来代表。每个文本属于k个主题,把k个主题所包含的词赋予该文档,便得到每个文档的候选词关键词。如果文档分词后得到的词语在候选关键词中,那么将其作为关键词提取出来。(候选关键词,一般指文档分词之后得到的词,这里指文档所属主题所包含的词)

二、方法流程:1、语料预处理、2、基于语料生成LDA模型、3、将模型用于某个文本得到该文本的topic概率分布和关键词。

1、LDA模型生成

  1. # 模型生成
  2. train = []
  3. corpus_path = "traindata/"
  4. filelist = os.listdir(corpus_path) # 获取corpus_path下的所有文件
  5. for file_path in filelist: # 遍历类别目录下文件
  6. fullname = corpus_path + file_path # 拼出文件名全路径
  7. content = readfile(fullname).strip() # 读取文件内容
  8. temp = chinese_word_cut(content)
  9. train.append(temp)
  10. M = len(train) # 训练集大小
  11. dictionary = corpora.Dictionary(train)
  12. corpus = [dictionary.doc2bow(text) for text in train]
  13. lda = models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=6,iterations=200)

2、得到每个主题下面所包含的词语。得到topic_word_dict

  1. num_topics = 6
  2. num_show_term = 20 # 每个主题保留20个词语
  3. topic_word_dict = {} # key:主题i value: 主题i包含的词语。
  4. for topic_id in range(num_topics):
  5. templist = []
  6. term_distribute_all = lda.get_topic_terms(topicid=topic_id)
  7. a1 = lda.print_topics()
  8. term_distribute = term_distribute_all[:num_show_term]
  9. term_distribute = np.array(term_distribute)
  10. term_id = term_distribute[:, 0].astype(np.int)
  11. for t in term_id:
  12. templist.append(dictionary.id2token[t])
  13. topic_word_dict[topic_id] = templist

 3、判断训练集每个文档所属主题和其候选关键词 得到doc_topic_dict 和doc_word_dict

  1. doc_topic_dict = {} # key: 第i篇文章 value: 第i篇文章的主题分布
  2. doc_word_dict = {} # key: 第i篇文章 value: 第i篇文章的主题所包含的词语
  3. for i in range(M):
  4. templist2 = [] #临时变量,存储topici包含的词语
  5. test_doc=train[i]#查看训练集中第i个样本
  6. doc_bow = dictionary.doc2bow(test_doc) #文档转换成bow
  7. num_show_topic = 2 # 每个文档取其前2个主题
  8. doc_topics = lda.get_document_topics(doc_bow) # 某文档的主题分布
  9. #print(doc_topics)
  10. doc_topic_dict[i] = doc_topics[:num_show_topic]
  11. for topic in doc_topics:
  12. temp_word = topic_word_dict[topic[0]]
  13. templist2 += temp_word
  14. doc_word_dict[i] = templist2

4 打印每个文档的关键词

  1. #打印 每个文档的关键词
  2. for i in range(M):
  3. keyword = []
  4. print('文档%s的关键词:' %filelist[i])
  5. for word in train[i]:
  6. if word in doc_word_dict[i]:
  7. keyword.append(word)
  8. print(set(keyword))
  9. print('文档%s的主题:' %filelist[i])
  10. print(doc_topic_dict[i])


 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/346440
推荐阅读
相关标签
  

闽ICP备14008679号