LDA (三) 关键词提取2.0

前言:对于第一个版本 的基于LDA的文本关键词提取  实现了给定文本,提取其关键的功能。后来有需求变动,需要给出所提取的关键词的重要程度排名。便有一个问题:如何判断文本自身的词语的重要性几何,其打分的依据是什么。这也是所有关键词提取方法中最重要的一步。

思路:1.  LDA模型训练得到 topic_word 。由此可以知道每个topic 由哪些单词所代表,以及每个单词在这个topic的重要性得分。

         2.   对于测试集文本,经过LDA模型之后,得到该文本对应的topic(通常一个文本会有多个topic,舍弃概率小的,保留大概率的topic)。由1得到的每个topic包含的单词,将其赋值给测试集文本,作为候选关键词。而对于每个候选关键词,其得分 score= 每个topic的概率*每个单词属于该topic的概率。

实现算法:在LDA模型完成之后的后续代码。

a = lda.print_topics(num_topics=6)
topic_word_dict = {}
for k in range(num_topics):
    b = lda.print_topic(k)
    b = b.split(' + ')
    word_score_list = []
    for i in b:
        temp1 = i.split('*')
        #print(temp1)
        temp1[1] = eval(temp1[1])
        word_score_list.append(temp1)
    topic_word_dict[k] = word_score_list
#print(topic_word_dict)

doc_topic_dict = {}  # key: 第i篇文章 val
### 使用LDA进行关键词提取 LDA(Latent Dirichlet Allocation)是一种无监督的主题建模技术,可以用来从大量文档中发现潜在的主题结构。通过这些主题,我们可以进一步提取每篇文档的关键字[^1]。 以下是基于Python的Gensim库实现LDA并从中提取关键字的一个完整示例: #### 数据准备 为了训练LDA模型,我们需要先对文本数据进行预处理。这通常包括分词、去除停用词、构建词袋表示等操作。 ```python import gensim from gensim.utils import simple_preprocess from gensim.parsing.preprocessing import STOPWORDS from nltk.stem import WordNetLemmatizer, SnowballStemmer import numpy as np import pandas as pd stemmer = SnowballStemmer("english") def preprocess(text): result = [] for token in simple_preprocess(text): if token not in gensim.parsing.preprocessing.STOPWORDS and len(token) > 3: result.append(stemmer.stem(WordNetLemmatizer().lemmatize(token, pos='v'))) return result ``` #### 构建语料库和词典 接下来,我们将原始文本转换为适合输入到LDA模型的形式——即一个稀疏矩阵形式的向量空间模型。 ```python data = ["The sky is blue.", "The sun is bright today.", "The sun in the sky is very bright."] processed_data = list(map(preprocess, data)) dictionary = gensim.corpora.Dictionary(processed_data) corpus = [dictionary.doc2bow(doc) for doc in processed_data] ``` #### 训练LDA模型 有了上述准备工作之后,就可以创建并训练我们的LDA模型了。 ```python lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=2, random_state=100, update_every=1, chunksize=100, passes=10, alpha='auto', per_word_topics=True) topics = lda_model.print_topics() for topic in topics: print(topic) ``` #### 提取关键词 一旦我们得到了各个主题及其对应的词语分布概率列表,那么对于任意给定的新文章或者已有文章都可以计算它属于哪个主题最有可能,并据此得到该篇文章的主要关键词。 ```python new_doc = 'the weather has been quite sunny lately' new_doc_bow = dictionary.doc2bow(preprocess(new_doc)) doc_lda = lda_model[new_doc_bow] print(lda_model.get_document_topics(new_doc_bow)) # 显示新文档对应各主题的概率得分 topic_id = max(doc_lda, key=lambda item:item[1])[0] # 获取最高概率所属的主题编号 words_in_topic = lda_model.show_topic(topic_id, topn=5) # 查看此主题下的前五个重要词汇 print(words_in_topic) ``` 以上就是利用LDA方法来进行关键词提取的过程概述及其实现代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值