Python基于Gensim實現(xiàn)文本相似度/匹配/查重
更新時間:2024年03月08日 10:30:51 作者:小龍在山東
Gensim是基于Python語言的自然語言處理庫,用來主題建模、文本相似度等文本處理任務,下面我們就來看看如何使用Gensim實現(xiàn)文本相似度/匹配/查重等操作吧
Gensim是基于Python語言的自然語言處理庫,用來主題建模、文本相似度等文本處理任務。
Gensim的工作流程包括:分詞、生成詞典、向量化、模型訓練等。
LSI模型
import jieba from gensim import corpora, models, similarities # 文本數(shù)據(jù)集 data = ['張文宏談為何這個冬天總生病', '“為什么這個冬天我們好像一直在生???”張文宏這樣說→'] # 分詞 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 = '為什么這個冬天我們好像一直在生病' # 預處理 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 = [ "好雨知時節(jié),當春乃發(fā)生。隨風潛入夜,潤物細無聲。野徑云俱黑,江船火獨明。曉看紅濕處,花重錦官城。", "君問歸期未有期,巴山夜雨漲秋池。何當共剪西窗燭,卻話巴山夜雨時。", "莫聽穿林打葉聲,何妨吟嘯且徐行。竹杖芒鞋輕勝馬,誰怕?一蓑煙雨任平生。料峭春風吹酒醒,微冷,山頭斜照卻相迎?;厥紫騺硎捝?,歸去,也無風雨也無晴。", "天街小雨潤如酥,草色遙看近卻無。最是一年春好處,絕勝煙柳滿皇都。", "古木陰中系短篷,杖藜扶我過橋東。沾衣欲濕杏花雨,吹面不寒楊柳風。", "少年聽雨歌樓上。紅燭昏羅帳。壯年聽雨客舟中。江闊云低、斷雁叫西風。 而今聽雨僧廬下。鬢已星星也。悲歡離合總無情。一任階前、點滴到天明。", "雨里雞鳴一兩家,竹溪村路板橋斜。婦姑相喚浴蠶去,閑看中庭梔子花。", "一夕輕雷落萬絲,霽光浮瓦碧參差。有情芍藥含春淚,無力薔薇臥曉枝。" ] # 1.將base_data中的數(shù)據(jù)進行遍歷后分詞 base_items = [[i for i in jieba.lcut(item)] for item in base_data] print(base_items) # 2.生成詞典 dictionary = corpora.Dictionary(base_items) # 3.通過doc2bow稀疏向量生成語料庫 corpus = [dictionary.doc2bow(item) for item in base_items] # 4.通過TF模型算法,計算出tf值 tf = models.TfidfModel(corpus) # 5.通過token2id得到特征數(shù)(字典里面的鍵的個數(shù)) num_features = len(dictionary.token2id.keys()) # 6.計算稀疏矩陣相似度,建立一個索引 index = similarities.MatrixSimilarity(tf[corpus], num_features=num_features) # 7.處理測試數(shù)據(jù) test_text = "風雨凄凄,雞鳴喈喈。既見君子,云胡不夷。風雨瀟瀟,雞鳴膠膠。既見君子,云胡不瘳。風雨如晦,雞鳴不已。既見君子,云胡不喜。" 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 = ['吃雞這里所謂的吃雞并不是真的吃雞,也不是諧音詞刺激的意思', '而是出自策略射擊游戲《絕地求生:大逃殺》里的臺詞', '我吃雞翅,你吃雞腿'] keyword = '玩過吃雞?今晚一起吃雞' # 1、將【文本集】生成【分詞列表】 texts = [lcut(text) for text in texts] # 2、基于文本集建立【詞典】,并獲得詞典特征數(shù) dictionary = Dictionary(texts) num_features = len(dictionary.token2id) # 3.1、基于詞典,將【分詞列表集】轉(zhuǎn)換成【稀疏向量集】,稱作【語料庫】 corpus = [dictionary.doc2bow(text) for text in texts] # 3.2、同理,用【詞典】把【搜索詞】也轉(zhuǎn)換為【稀疏向量】 kw_vector = dictionary.doc2bow(lcut(keyword)) # 4、創(chuàng)建【TF-IDF模型】,傳入【語料庫】來訓練 tfidf = TfidfModel(corpus) # 5、用訓練好的【TF-IDF模型】處理【被檢索文本】和【搜索詞】 tf_texts = tfidf[corpus] # 此處將【語料庫】用作【被檢索文本】 tf_kw = tfidf[kw_vector] # 6、相似度計算 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 = '無痛人流并非無痛' text2 = '北方人流浪到南方' texts = [text1, text2] keyword = '無痛人流' 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)) # 相似度計算 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相似度計算:') sim = index[tfidf[new_vec]] for i in range(len(sim)): print('第', i+1, '句話的相似度為:', sim[i])
到此這篇關于Python基于Gensim實現(xiàn)文本相似度/匹配/查重的文章就介紹到這了,更多相關Python Gensim內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于Python使用logging庫進行有效日志管理的方法詳解
在開發(fā)大型軟件或處理復雜問題時,我們經(jīng)常需要一種方法來記錄和跟蹤程序的運行狀態(tài),Python 提供了一個名為 logging 的標準庫,可以幫助我們更好地完成這項任務,在這篇文章中,我們將介紹如何使用 Python 的 logging 庫進行日志記錄2023-06-06python如何爬取網(wǎng)站數(shù)據(jù)并進行數(shù)據(jù)可視化
這篇文章主要介紹了python爬取拉勾網(wǎng)數(shù)據(jù)并進行數(shù)據(jù)可視化,爬取拉勾網(wǎng)關于python職位相關的數(shù)據(jù)信息,并將爬取的數(shù)據(jù)已csv各式存入文件,然后對csv文件相關字段的數(shù)據(jù)進行清洗,并對數(shù)據(jù)可視化展示,包括柱狀圖展示、直方圖展示,需要的朋友可以參考下2019-07-07Python實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之隊列詳解
這篇文章主要介紹了Python實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之隊列,詳細分析了隊列的定義、功能與Python實現(xiàn)隊列的相關技巧,以及具體的用法,需要的朋友可以參考下2015-04-04Pandas庫中dataframe.corr()函數(shù)的使用
dataframe.corr()是Pandas庫中的一個函數(shù),用于計算DataFrame中各列之間的相關系數(shù),本文主要介紹了Pandas庫中dataframe.corr()函數(shù)的使用,具有一定的參考價值,感興趣的可以了解一下2024-07-07