NLP 使用TF IDF模型計算文字相似度

2021-09-26 14:36:00 字數 2337 閱讀 7196

所用資料集:chnsenticorp_htl_all.csv

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

要注意的是,搜尋文字text與被檢索的文件共用乙個特徵詞詞典。

**主要使用gensim庫完成了分詞、tf-idf模型訓練、文字相似度計算。

過程如下:

分詞、建立特徵詞典、建立語料庫、用tf-idf模型處理語料庫、計算搜尋文字與被檢索文字的相似度。

import csv

import jieba

from gensim import corpora, models, similarities

count = 0

wordlisttop10 =

with open('/home/kiosk/downloads/chinesenlpcorpus-master/datasets/chnsenticorp_htl_all/chnsenticorp_htl_all.csv', 'r') as f:

lines = csv.reader(f) #lines的型別是指向csv檔案的第一行

next(lines) #指向csv檔案的第二行 這個函式的引數是迭代器(iterator)和乙個default

#next(iterator, default)

#default是迭代器已經到了最末端,再呼叫next()函式的輸出值。不填這個引數的話,到了最末端還用next()的話會報錯。

for line in lines:

#只選取前10句話

if count == 10:

break

seglist = list(jieba.cut(line[1])) # 分詞 jieba.cut(line[1])對每一行列表的第二個元素進行分詞,型別是generator

count += 1

# print('/'.join(seglist)) # '/'.join(seglist)將seglist即每句話的分詞列表 轉換成字串,用』/『將每個元素連線起來

"""製作詞袋模型(bag_of_word (bow))

"""# 製作字典

dictionary = corpora.dictionary(wordlisttop10)

# 可以通過token2id得到特徵數字

# print(dictionary.token2id)

"""製作數字向量型別的語料庫(doc2bow)

"""#----> 將字串轉換成數字向量型別的詞袋模型(稀疏向量)

# 原始檔不做處理是乙個字串型別的語料庫

corpus = [dictionary.doc2bow(doc) for doc in wordlisttop10]

def semblance(text, corpus):

# 對測試文字分詞

dic_text_list = list(jieba.cut(text))

# 製作測試文字的詞袋

doc_text_vec = dictionary.doc2bow(dic_text_list)

# 獲取語料庫每個文件中每個詞的tfidf值,即用tfidf模型訓練語料庫

tfidf = models.tfidfmodel(corpus)

#對稀疏向量建立索引

index = similarities.sparsematrixsimilarity(tfidf[corpus], num_features=len(dictionary.keys()))

sim = index[tfidf[doc_text_vec]] # 相當於sim = index.get_similarities(tfidf[doc_text_vec])

#按照相似度來排序

sim_sorted = sorted(enumerate(sim,1), key=lambda x: -x[1])

#相當於sorted(enumerate(sim), key=lambda x: x[1], reverse=true

print(sim_sorted)

# for e,s in enumerate(sim,1):

# print('text 與 doc%d 相似度為:%.6f' % (e, s))

if __name__ == '__main__':

text = '這個商務大床房,感覺還不錯'

semblance(text, corpus)

執行效果:

可以看到,text與資料集中第二條語句相似度最高。

TF IDF模型和文字相似度的計算

tf idf term frequency inverse document frequency 是一種用於資訊檢索與文字挖掘的常用加權技術。tf idf是一種統計方法,用以評估一字詞對於乙個檔案集或乙個語料庫中的其中乙份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它...

關於使用TF IDF模型來推薦歌曲給微博使用者的收穫

一開始不知道該如何去做這個作業,但在同學的指導下知道了如何快速的做成。其次,把微博內容和歌曲歌詞弄到文字裡 然後就是分詞的工作了,分詞主要用的是jieba分詞,通過使用他可以把文字分成乙個個單詞,也可以使用他提取出關鍵字,然後再試用tf idf模型去比較相似度就可以完成了。其中,我還學習了如何在li...

盒子模型的計算公式及使用技巧

padding是內邊距,會影響我們在瀏覽器中看到的元素的實際大小,內邊距會讓元素的內容增大,和其他元素沒有關係 margin是外邊距,不會影響我們在瀏覽器中看到的元素的實際大小,外邊距不會讓元素的內容增大,是和另乙個元素的間距 1 doctype html 2 html 3 head 4 meta ...