Python基于Gensim實(shí)現(xiàn)文本相似度/匹配/查重
Gensim是基于Python語(yǔ)言的自然語(yǔ)言處理庫(kù),用來(lái)主題建模、文本相似度等文本處理任務(wù)。
Gensim的工作流程包括:分詞、生成詞典、向量化、模型訓(xùn)練等。
LSI模型
import jieba
from gensim import corpora, models, similarities
# 文本數(shù)據(jù)集
data = ['張文宏談為何這個(gè)冬天總生病',
'“為什么這個(gè)冬天我們好像一直在生病?”張文宏這樣說(shuō)→']
# 分詞
token_list = []
for sentence in data:
tokens = [word for word in jieba.lcut(sentence)]
token_list.append(tokens)
print(token_list)
# 詞典,單詞映射唯一ID
dic = corpora.Dictionary(token_list)
# 文本轉(zhuǎn)化為文檔-詞袋(document-term)表示
corpus = [dic.doc2bow(doc) for doc in token_list]
print(corpus)
# 生成模型
lda_model = models.LsiModel(corpus, num_topics=2, id2word=dic)
# 主題及其詞匯
for topic in lda_model.print_topics():
print(topic)
# 索引
index = similarities.MatrixSimilarity(lda_model[corpus])
query = '為什么這個(gè)冬天我們好像一直在生病'
# 預(yù)處理
query_bow = dic.doc2bow(jieba.lcut(query))
# 相似性得分
sims = index[lda_model[query_bow]]
sims = sorted(enumerate(sims), key=lambda item: -item[1])
for document_id, similarity in sims:
print(document_id, similarity)
TFIDF
方案一
import jieba
from gensim import corpora, models, similarities
if __name__ == '__main__':
base_data = [
"好雨知時(shí)節(jié),當(dāng)春乃發(fā)生。隨風(fēng)潛入夜,潤(rùn)物細(xì)無(wú)聲。野徑云俱黑,江船火獨(dú)明。曉看紅濕處,花重錦官城。",
"君問(wèn)歸期未有期,巴山夜雨漲秋池。何當(dāng)共剪西窗燭,卻話巴山夜雨時(shí)。",
"莫聽(tīng)穿林打葉聲,何妨吟嘯且徐行。竹杖芒鞋輕勝馬,誰(shuí)怕?一蓑煙雨任平生。料峭春風(fēng)吹酒醒,微冷,山頭斜照卻相迎。回首向來(lái)蕭瑟處,歸去,也無(wú)風(fēng)雨也無(wú)晴。",
"天街小雨潤(rùn)如酥,草色遙看近卻無(wú)。最是一年春好處,絕勝煙柳滿皇都。",
"古木陰中系短篷,杖藜扶我過(guò)橋東。沾衣欲濕杏花雨,吹面不寒楊柳風(fēng)。",
"少年聽(tīng)雨歌樓上。紅燭昏羅帳。壯年聽(tīng)雨客舟中。江闊云低、斷雁叫西風(fēng)。 而今聽(tīng)雨僧廬下。鬢已星星也。悲歡離合總無(wú)情。一任階前、點(diǎn)滴到天明。",
"雨里雞鳴一兩家,竹溪村路板橋斜。婦姑相喚浴蠶去,閑看中庭梔子花。",
"一夕輕雷落萬(wàn)絲,霽光浮瓦碧參差。有情芍藥含春淚,無(wú)力薔薇臥曉枝。"
]
# 1.將base_data中的數(shù)據(jù)進(jìn)行遍歷后分詞
base_items = [[i for i in jieba.lcut(item)] for item in base_data]
print(base_items)
# 2.生成詞典
dictionary = corpora.Dictionary(base_items)
# 3.通過(guò)doc2bow稀疏向量生成語(yǔ)料庫(kù)
corpus = [dictionary.doc2bow(item) for item in base_items]
# 4.通過(guò)TF模型算法,計(jì)算出tf值
tf = models.TfidfModel(corpus)
# 5.通過(guò)token2id得到特征數(shù)(字典里面的鍵的個(gè)數(shù))
num_features = len(dictionary.token2id.keys())
# 6.計(jì)算稀疏矩陣相似度,建立一個(gè)索引
index = similarities.MatrixSimilarity(tf[corpus], num_features=num_features)
# 7.處理測(cè)試數(shù)據(jù)
test_text = "風(fēng)雨凄凄,雞鳴喈喈。既見(jiàn)君子,云胡不夷。風(fēng)雨瀟瀟,雞鳴膠膠。既見(jiàn)君子,云胡不瘳。風(fēng)雨如晦,雞鳴不已。既見(jiàn)君子,云胡不喜。"
test_words = [word for word in jieba.cut(test_text)]
print(test_words)
# 8.新的稀疏向量
new_vec = dictionary.doc2bow(test_words)
# 9.算出相似度
sims = index[tf[new_vec]]
print(list(sims))方案二
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))方案三
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 Gensim內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python爬取十篇新聞統(tǒng)計(jì)TF-IDF
這篇文章主要為大家詳細(xì)介紹了Python爬取十篇新聞統(tǒng)計(jì)TF-IDF的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
selenium2.0中常用的python函數(shù)匯總
這篇文章主要介紹了selenium2.0中常用的python函數(shù),總結(jié)分析了selenium2.0中常用的python函數(shù)的功能、原理與基本用法,需要的朋友可以參考下2019-08-08
Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn)
這篇文章主要介紹了Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Pycharm 解決自動(dòng)格式化沖突的設(shè)置操作
這篇文章主要介紹了Pycharm 解決自動(dòng)格式化沖突的設(shè)置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
初步認(rèn)識(shí)Python中的列表與位運(yùn)算符
這篇文章主要介紹了Python中的列表與位運(yùn)算符,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10
Python反爬實(shí)戰(zhàn)掌握酷狗音樂(lè)排行榜加密規(guī)則
最新的酷狗音樂(lè)反爬來(lái)襲,本文介紹如何利用Python掌握酷狗排行榜加密規(guī)則,本章內(nèi)容只限學(xué)習(xí),切勿用作其他用途!?。。。? 有需要的朋友可以借鑒參考下2021-10-10
Python3基礎(chǔ)之基本數(shù)據(jù)類型概述
這篇文章主要介紹了Python3的基本數(shù)據(jù)類型,需要的朋友可以參考下2014-08-08

