gensim提取一个句子的关键词_NLP(五):关键词提取补充(语料库和向量空间)...

本文介绍了如何使用gensim将语料库转化为向量,包括建立词典、词频统计和TF-IDF模型。通过TF-IDF模型计算语料库与新句子的相似度,为关键词提取和文本比较提供基础。
摘要由CSDN通过智能技术生成

一、将语料库转化为向量(gensim)

在对语料库进行基本的处理后(分词,去停用词),有时需要将它进行向量化,便于后续的工作。

from gensim importcorpora,similarities,modelsimportjieba#第一步:确定语料库的语料和要进行判断的句子:#wordlist作为语料库,语料库中有三句话,相当于三篇文章.

wordlist=[‘我喜欢编程‘,‘我想变漂亮‘,‘今天吃午饭了吗‘]

sentenses=‘我喜欢什么‘

#第二步:使用语料库建立词典,也就是给预料库中的每个单词标上序号,类似:{‘我‘:1,‘喜欢‘:2,‘编程‘:3,....}首先进行中文分词

text=[[word for word in jieba.cut(words) ]for words inwordlist]

dictionary=corpora.Dictionary(text)print(dictionary)#第三步,对语料中的每个词进行词频统计,doc2bow是对每一句话进行词频统计,传入的是一个list#corpus得到的是一个二维数组[[(0, 1), (1, 1), (2, 1)], [(3, 1), (4, 1)], [(5, 1), (6, 1), (7, 1), (8, 1), (9, 1)]],意思是编号为0的词出现的频率是1次,编号为2的词出现的频率是1次

corpus=[dictionary.doc2bow(word) for word intext]print(corpus)#得到二维数组,最小元素为(词的ID号,词频)

代码结果为:

06539e7148cf80838bc28dd60336092f.png

我们利用gensim.corpora.dictionary.Dictionary类为每个出现在语料库中的单词分配了一个独一无二的整数编号。这个操作收集了单词计数及其他相关的统计信息。在结尾,我们看到语料库中有10个不同的单词,这表明每个文档将会用10个数字表示

doc2bow函数主要用于让dic变为bow词袋模型,对每个不同单词的出现次数进行了计数,并将单词转换为其编号,然后以稀疏向量的形式返回结果。上述代码的corpus就是语料库的词袋模型,其中,每一个子列表都表示一篇文章。

前面有说TFIDF可以用来做关键词提取,因为它认为tfidf值越大的词就越能够体现它对这篇文章的重要性。但TF-IDF也可用于查找相似文章、对文章进行摘要提取、特征选择(重要特征的提取)工作。如果说接下来是要对sentenses和语料库的三篇文章进行相似度比较的话,接下来的代码为:

#第四步:使用corpus训练tfidf模型

model=models.TfidfModel(corpus)#要是想要看tfidf的值的话可以:tfidf=model[corpus]‘‘‘tfidf的结果是语料库中每个词的tfidf值

[(0, 0.5773502691896258), (1, 0.5773502691896258), (2, 0.5773502691896258)]

[(3, 0.7071067811865475), (4, 0.7071067811865475)]

[(5, 0.4472135954999579), (6, 0.4472135954999579), (7, 0.4472135954999579), (8, 0.4472135954999579), (9, 0.4472135954999579)]‘‘‘

#第五步:为tfidf模型中的每个句子建立索引,便于进行相似度查询,传入的时候语料库的tfidf值

similarity=similarities.MatrixSimilarity(tfidf)#第六步,处理要比较的句子,首先分词,其次获得词频,jieba只能传入字符串

sen=[word for word injieba.cut(sentenses)]

sen2=dictionary.doc2bow(sen)#然后计算它的tfidf值

sen_tfidf=model[sen2]#获得与所有句子的相似度,sim输出的是一个数组

sim=similarity[sen_tfidf]

https://blog.csdn.net/Lau_Sen/article/details/80436819

代码中的tfidf,和sen_tfidf结果分别是语料库和新句子的tfidf向量化表示。很多模型就是基于tf-idf来做的,比如lsi,lda等。

现在每个句子就变成了[(词id号,idf值),(词id号,idf值)....]这样的稀疏表示形式。

原文:https://www.cnblogs.com/liuxiangyan/p/12481903.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值