Python+gensim實(shí)現(xiàn)文本相似度分析詳解
1、gensim使用流程

2、代碼實(shí)現(xiàn)
from jieba import lcut
from gensim.similarities import SparseMatrixSimilarity
from gensim.corpora import Dictionary
from gensim.models import TfidfModel
# 文本集和搜索詞
texts = ['吃雞這里所謂的吃雞并不是真的吃雞,也不是諧音詞刺激的意思',
'而是出自策略射擊游戲《絕地求生:大逃殺》里的臺(tái)詞',
'我吃雞翅,你吃雞腿']
keyword = '玩過(guò)吃雞?今晚一起吃雞'
# 1、將【文本集】生成【分詞列表】
texts = [lcut(text) for text in texts]
# 2、基于文本集建立【詞典】,并獲得詞典特征數(shù)
dictionary = Dictionary(texts)
num_features = len(dictionary.token2id)
# 3.1、基于詞典,將【分詞列表集】轉(zhuǎn)換成【稀疏向量集】,稱作【語(yǔ)料庫(kù)】
corpus = [dictionary.doc2bow(text) for text in texts]
# 3.2、同理,用【詞典】把【搜索詞】也轉(zhuǎn)換為【稀疏向量】
kw_vector = dictionary.doc2bow(lcut(keyword))
# 4、創(chuàng)建【TF-IDF模型】,傳入【語(yǔ)料庫(kù)】來(lái)訓(xùn)練
tfidf = TfidfModel(corpus)
# 5、用訓(xùn)練好的【TF-IDF模型】處理【被檢索文本】和【搜索詞】
tf_texts = tfidf[corpus] # 此處將【語(yǔ)料庫(kù)】用作【被檢索文本】
tf_kw = tfidf[kw_vector]
# 6、相似度計(jì)算
sparse_matrix = SparseMatrixSimilarity(tf_texts, num_features)
similarities = sparse_matrix.get_similarities(tf_kw)
for e, s in enumerate(similarities, 1):
print('kw 與 text%d 相似度為:%.2f' % (e, s))打印結(jié)果
keyword 與 text1 相似度為:0.65
keyword 與 text2 相似度為:0.00
keyword 與 text3 相似度為:0.12
3、過(guò)程拆解
3.1、生成分詞列表
對(duì)文本集中的文本進(jìn)行 中文分詞,返回分詞列表
格式如下:
[‘word1’, ‘word2’, ‘word3’, …]
import jieba text = '七月七日長(zhǎng)生殿,夜半無(wú)人私語(yǔ)時(shí)。' words = jieba.lcut(text) print(words)
[‘七月’, ‘七日’, ‘長(zhǎng)生殿’, ‘,’, ‘夜半’, ‘無(wú)人’, ‘私語(yǔ)’, ‘時(shí)’, ‘。’]
3.2、基于文本集建立詞典,獲取特征數(shù)
- corpora.Dictionary:建立詞典
- len(dictionary.token2id):詞典中詞的個(gè)數(shù)
from gensim import corpora
import jieba
# 文本集
text1 = '堅(jiān)果果實(shí)'
text2 = '堅(jiān)果實(shí)在好吃'
texts = [text1, text2]
# 將文本集生成分詞列表
texts = [jieba.lcut(text) for text in texts]
print('文本集:', texts)
# 基于文本集建立詞典
dictionary = corpora.Dictionary(texts)
print('詞典:', dictionary)
# 提取詞典特征數(shù)
feature_cnt = len(dictionary.token2id)
print('詞典特征數(shù):%d' % feature_cnt)打印結(jié)果
文本集: [[‘堅(jiān)果’, ‘果實(shí)’], [‘堅(jiān)果’, ‘實(shí)在’, ‘好吃’]]
詞典: Dictionary(4 unique tokens: [‘堅(jiān)果’, ‘果實(shí)’, ‘好吃’, ‘實(shí)在’])
詞典特征數(shù):4
3.3、基于詞典建立語(yǔ)料庫(kù)
語(yǔ)料庫(kù)即存放稀疏向量的列表
from gensim import corpora
import jieba
text1 = '來(lái)東京吃東京菜'
text2 = '東京啊東京啊東京'
texts = [text1, text2]
texts = [jieba.lcut(text) for text in texts]
dictionary = corpora.Dictionary(texts)
print('詞典(字典):', dictionary.token2id)
# 基于詞典建立新的【語(yǔ)料庫(kù)】
corpus = [dictionary.doc2bow(text) for text in texts]
print('語(yǔ)料庫(kù):', corpus)打印結(jié)果
詞典(字典): {‘東京’: 0, ‘吃’: 1, ‘來(lái)’: 2, ‘菜’: 3, ‘啊’: 4}
語(yǔ)料庫(kù): [[(0, 2), (1, 1), (2, 1), (3, 1)], [(0, 3), (4, 2)]]
3.3.1、doc2bow函數(shù)
1、將所有單詞取【集合】,并對(duì)每個(gè)單詞分配一個(gè)ID號(hào)
以 ['東京', '啊', '東京', '啊', '東京']為例
對(duì)單詞分配ID: 東京→ 0; 啊→ 4
變成: [0, 4, 0, 4, 0]
2、轉(zhuǎn)換成 稀疏向量
0有 3個(gè),即表示為( 0, 3)
4有 2個(gè),即表示為( 4, 2)
最終結(jié)果:[( 0, 3), ( 4, 2)]
3.3.2、搜索詞也轉(zhuǎn)成稀疏向量
from gensim import corpora import jieba text1 = '南方醫(yī)院無(wú)痛人流' text2 = '北方人流落南方' texts = [text1, text2] texts = [jieba.lcut(text) for text in texts] dictionary = corpora.Dictionary(texts) # 用【詞典】把【搜索詞】也轉(zhuǎn)換為【稀疏向量】 keyword = '無(wú)痛人流' kw_vector = dictionary.doc2bow(jieba.lcut(keyword)) print(kw_vector)
[(0, 1), (3, 1)]
3.4、用語(yǔ)料庫(kù)訓(xùn)練TF-IDF模型
- TF-IDF是一種統(tǒng)計(jì)方法,用以評(píng)估一字詞對(duì)于一個(gè)文件集或一個(gè)語(yǔ)料庫(kù)中的其中一份文件的重要程度
from gensim import corpora, models, similarities import jieba text1 = '南方醫(yī)院無(wú)痛人流' text2 = '北方人流浪到南方' texts = [text1, text2] texts = [jieba.lcut(text) for text in texts] dictionary = corpora.Dictionary(texts) feature_cnt = len(dictionary.token2id.keys()) corpus = [dictionary.doc2bow(text) for text in texts] # 用語(yǔ)料庫(kù)來(lái)訓(xùn)練TF-IDF模型 tfidf = models.TfidfModel(corpus) print(tfidf) TfidfModel(num_docs=2, num_nnz=9)
3.5、相似度計(jì)算
from gensim import corpora, models, similarities
import jieba
text1 = '無(wú)痛人流并非無(wú)痛'
text2 = '北方人流浪到南方'
texts = [text1, text2]
keyword = '無(wú)痛人流'
texts = [jieba.lcut(text) for text in texts]
dictionary = corpora.Dictionary(texts)
num_features = len(dictionary.token2id)
corpus = [dictionary.doc2bow(text) for text in texts]
tfidf = models.TfidfModel(corpus)
new_vec = dictionary.doc2bow(jieba.lcut(keyword))
# 相似度計(jì)算
index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features)
print('\nTF-IDF模型的稀疏向量集:')
for i in tfidf[corpus]:
print(i)
print('\nTF-IDF模型的keyword稀疏向量:')
print(tfidf[new_vec])
print('\n相似度計(jì)算:')
sim = index[tfidf[new_vec]]
for i in range(len(sim)):
print('第', i+1, '句話的相似度為:', sim[i])
- 注釋

到此這篇關(guān)于Python+gensim實(shí)現(xiàn)文本相似度分析詳解的文章就介紹到這了,更多相關(guān)Python文本相似度分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python爬蟲_城市公交、地鐵站點(diǎn)和線路數(shù)據(jù)采集實(shí)例
下面小編就為大家分享一篇Python爬蟲_城市公交、地鐵站點(diǎn)和線路數(shù)據(jù)采集實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Python數(shù)據(jù)正態(tài)性檢驗(yàn)實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了Python數(shù)據(jù)正態(tài)性檢驗(yàn)實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Pytorch模型轉(zhuǎn)onnx模型實(shí)例
今天小編就為大家分享一篇Pytorch模型轉(zhuǎn)onnx模型實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python實(shí)現(xiàn)輕松防止屏幕截圖的技巧分享
屏幕截圖是一種常見(jiàn)的用于記錄信息或者監(jiān)控用戶活動(dòng)的方法,為了保護(hù)隱私和數(shù)據(jù)安全,可以通過(guò)使用Python編寫一些防護(hù)措施來(lái)防止他人截取我們的屏幕,下面我們就來(lái)學(xué)習(xí)一下有哪些具體操作吧2023-12-12
Matplotlib使用Cursor實(shí)現(xiàn)UI定位的示例代碼
這篇文章主要介紹了Matplotlib使用Cursor實(shí)現(xiàn)UI定位的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

