LDA主题模型提取文本中的关键词

本文介绍如何使用LDA主题模型结合TF-IDF权重,从文本中提取关键词。首先,通过折肘法确定主题数为5,然后利用gensim库构建词典和TF-IDF模型。接着,计算词的分布与文档分布的相似度,选取最高相似度的关键词。代码实现包括数据预处理、主题模型构建和关键词提取。最终,展示了主函数的入口及关键词提取过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

如题,本文是LDA(Latent Dirichlet Allocation)主题模型的第二篇,第一篇是 折肘法+困惑度确定LDA主题模型的主题数。在上一篇文章中,简单介绍LDA模型的概念和LDA主题模型的主题数的确定方法-折肘法+困惑度折线法。本文将基于上一篇文章中的方法,确定给定文本中的主题数=5,进而提取关键词key word)。

理论

LDA主题模型如何提取文本中的关键词?本文采用如下方案:
- 使用 tf-idf 对数据集中的每个词进行加权,得到加权后的向量表示;
- 通过词空间构建和向量化方法,得到给定数据集的主题-词分布
- 计算词的分布和文档的分布的相似度,取相似度最高的keyword num个词作为关键词。

代码

0. 加载依赖包

import gensim
import math
import jieba
import jieba.posseg as posseg
from jieba import analyse
from gensim import corpora, models
import functools
import numpy as np
import os
import time
from tqdm import tqdm

1. 主题模型类定义

class TopicModel(object):
	"""使用gensim的接口,将文本转为向量化表示"""
    def __init__(self, doc_list, keyword_num, model='LSI', num_topics=5):
   		"""形参:给定数据集,关键词数,候选主题模型(可选LSI、LDA等),主题数"""
        """构建词空间,BOW模型向量化"""
        self.dictionary = corpora.Dictionary(doc_list)
        corpus = [self.dictionary.doc2bow(doc) for doc in doc_list]
        
        """对于文本中的每个单词,使用tf-idf进行加权,得到加权后的向量表示"""
        self.tfidf_model = models.TfidfModel(corpus)
        self.tfidf_corpus = 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()
            
        """给定数据集的主题-词分布"""
        word_dic = self.word_dictionary(doc_list)
        self.wordtopic_dic = self.get_wordtopic(word_dic)
 
    """BOW向量化"""
    def doc2bowvec(self, word_list):
        vec_list = [1 if word in word_list else 0 for word in self.dictionary]
        print("vec_list", vec_list)
        return vec_list
 
    """词空间构建方法和向量化方法"""
    def word_dictionary(self, doc_list):
        dictionary = []
        for doc in doc_list:
            dictionary
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值