欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+gensim實(shí)現(xiàn)文本相似度分析詳解

 更新時(shí)間:2023年07月28日 10:26:29   作者:小基基o_O  
這篇文章主要介紹了Python+gensim實(shí)現(xiàn)文本相似度分析詳解,在開發(fā)中我們會(huì)遇到進(jìn)行文本相似度分析的需求,計(jì)算文本相似度,用于鑒別文章是否存在抄襲,需要的朋友可以參考下

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 = '玩過吃雞?今晚一起吃雞'
# 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模型】,傳入【語料庫】來訓(xùn)練
tfidf = TfidfModel(corpus)
# 5、用訓(xùn)練好的【TF-IDF模型】處理【被檢索文本】和【搜索詞】
tf_texts = tfidf[corpus]  # 此處將【語料庫】用作【被檢索文本】
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、過程拆解

3.1、生成分詞列表

對(duì)文本集中的文本進(jìn)行 中文分詞,返回分詞列表

格式如下:

[‘word1’, ‘word2’, ‘word3’, …]

import jieba
text = '七月七日長生殿,夜半無人私語時(shí)。'
words = jieba.lcut(text)
print(words)

[‘七月’, ‘七日’, ‘長生殿’, ‘,’, ‘夜半’, ‘無人’, ‘私語’, ‘時(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、基于詞典建立語料庫

語料庫即存放稀疏向量的列表

from gensim import corpora
import jieba
text1 = '來東京吃東京菜'
text2 = '東京啊東京啊東京'
texts = [text1, text2]
texts = [jieba.lcut(text) for text in texts]
dictionary = corpora.Dictionary(texts)
print('詞典(字典):', dictionary.token2id)
# 基于詞典建立新的【語料庫】
corpus = [dictionary.doc2bow(text) for text in texts]
print('語料庫:', corpus)

打印結(jié)果

詞典(字典): {‘東京’: 0, ‘吃’: 1, ‘來’: 2, ‘菜’: 3, ‘啊’: 4}
語料庫: [[(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: 東京04

變成: [0, 4, 0, 4, 0]

2、轉(zhuǎn)換成 稀疏向量

03個(gè),即表示為( 0, 3)

42個(gè),即表示為( 4, 2)

最終結(jié)果:[( 0, 3), ( 4, 2)]

3.3.2、搜索詞也轉(zhuǎn)成稀疏向量

from gensim import corpora
import jieba
text1 = '南方醫(yī)院無痛人流'
text2 = '北方人流落南方'
texts = [text1, text2]
texts = [jieba.lcut(text) for text in texts]
dictionary = corpora.Dictionary(texts)
# 用【詞典】把【搜索詞】也轉(zhuǎn)換為【稀疏向量】
keyword = '無痛人流'
kw_vector = dictionary.doc2bow(jieba.lcut(keyword))
print(kw_vector)

[(0, 1), (3, 1)]

3.4、用語料庫訓(xùn)練TF-IDF模型

  • TF-IDF是一種統(tǒng)計(jì)方法,用以評(píng)估一字詞對(duì)于一個(gè)文件集或一個(gè)語料庫中的其中一份文件的重要程度
from gensim import corpora, models, similarities
import jieba
text1 = '南方醫(yī)院無痛人流'
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]
# 用語料庫來訓(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 = '無痛人流并非無痛'
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))
# 相似度計(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論