基於tfidf 以及 lsi 的文字相似度分析

2021-08-04 08:56:36 字數 3293 閱讀 5668

本文主要為了計算文件之間的相似度。標準語聊為我們訓練模型所需的,使用者語料則用來測試與標準語聊的相似度

1、 資料預處理部分,見注釋

對標準語聊進行處理如下

ws = open('d:/sentence.csv','r',encoding='gbk')

times = 0

import re

import jieba

standard_data = #

##標準語料

map_value =

seed = 0

from zhon.hanzi import punctuation

for i in ws.readlines():

times += 1

if times == 1:

continue

newline = i.strip().split(',')

newline = re.sub("[a-za-z0-9\[

\`\~

\!\@

\#\$

\^\&

\*\(

\)\=\|\

\'\:

\;\'

\,\[

\]\.

\<

\>

\/\?

\~\!

\@\#

\\\&

\*\%

\-\_

]", "", newline[0])

newline = re.sub(' ','',newline)

newline = re.sub("[

%s]+" %punctuation, "", newline)

seed += 1

map_value[seed-1] = newline

ws.close()

2、tf-idf

from gensim import corpora, models, similarities 

# 生成字典和向量語料

dictionary = corpora.dictionary(standard_data)

# 通過下面一句得到語料中每一篇文件對應的稀疏向量(這裡是bow向量)

corpus = [dictionary.doc2bow(text) for

text

in standard_data]

# corpus是乙個返回bow向量的迭代器。下面**將完成對corpus中出現的每乙個特徵的idf值的統計工作

tfidf_model = models.tfidfmodel(corpus)

corpus_tfidf = tfidf_model[corpus]

####文件相似性的計算

map_value_user = {}

import jieba

import re

raw_data =

w = open('d:/user_content_v2.txt','r',encoding= 'utf-8')

start = 0

forline

in w.readlines():

newline = line.strip()

newline = re.sub(' ','',newline)

newline2 = jieba.cut(newline)

newline2 = list(newline2)

map_value_user[start] = newline

start += 1

w.close()

index = similarities.matrixsimilarity(corpus_tfidf)

vec_bow =[dictionary.doc2bow(text) for

text

in raw_data] #把使用者語料轉為詞包

all_reult_sims =

times_v2 = 0

###對每個使用者語聊與標準語聊計算相似度

for i in vec_bow:

#直接使用上面得出的tf-idf 模型即可得出商品描述的tf-idf 值

sims = index[tfidf_model[i]]

sims = sorted(enumerate(sims), key=lambda item: -item[1])

result_sims =

for i,j in sims:

times_v2 += 1

3、lsi

lsi = models.lsimodel(corpus_tfidf)  

corpus_lsi = lsi[corpus_tfidf]

####文件相似性的計算

map_value_user = {}

import jieba

import re

raw_data =

w = open('d:/user_content_v2.txt','r',encoding= 'utf-8')

start = 0

forline

in w.readlines():

newline = line.strip()

newline = re.sub(' ','',newline)

newline2 = jieba.cut(newline)

newline2 = list(newline2)

map_value_user[start] = newline

start += 1

w.close()

index = similarities.matrixsimilarity(corpus_lsi)

vec_bow =[dictionary.doc2bow(text) for

text

in raw_data] #把商品描述轉為詞包

all_reult_sims =

times_v2 = 0

for i in vec_bow:

#直接使用上面得出的tf-idf 模型即可得出商品描述的tf-idf 值

sims = index[lsi[tfidf_model[i]]]

sims = sorted(enumerate(sims), key=lambda item: -item[1])

result_sims =

for i,j in sims:

times_v2 += 1

文字的tfidf值表示

做nlp的時候,如果用到tf idf,sklearn中用countvectorizer與tfidftransformer兩個類,下面對和兩個類進行講解 countvectorizer與tfidftransformer在處理訓練資料的時候都用fit transform方法,在測試集用transform...

基於TF IDF的新聞標籤提取

新聞標籤是一條新聞的關鍵字,可以由編輯上傳,或者通過機器提取。新聞標籤的提取主要用於推薦系統中,所以,提取的準確性影響推薦系統的有效性。同時,對於將標籤展示出來的新聞 標籤的準確性也會影響使用者體驗。新聞首先是一段文字,新聞的標籤首先是這一段文字的關鍵字。在文字關鍵字提取當中,td idf是首先可以...

使用sklearn提取文字的tfidf特徵

from sklearn.feature extraction.text import countvectorizer,tfidfvectorizer,tfidftransformercorpus this is the first document.this is the second secon...