環境描述
Python環境:Python 3.6.1
系統版本:windows7 64bit
檔案描述
一共有三個檔案,分别是:file_01.txt、file_02.txt、file_03.txt
file_01.txt檔案内容:
我吃過糖之後,發現我的牙齒真的很疼
file_02.txt檔案内容:
牙疼不是病疼起來要人命.
file_03.txt檔案内容:
我的肚子不舒服!與此同時,牙疼也讓我接近崩潰
文本相似度分析步驟
- 打開并讀取文檔内容
- 對要進行分析的文檔分詞
- 格式化文檔
- 計算詞頻(可以過濾詞頻較小的詞)
- 通過語料庫建立字典
- 加載要對比的文檔
- 将要對比的文檔通過doc2bow轉化為稀疏向量
- 對稀疏向量進行進一步處理,得到新語料庫
- 将新語料庫通過tfidfmodel進行處理,得到tfidf
- 通過token2id得到特征數
- 稀疏矩陣相似度,進而建立索引
- 得到相似度結果
實作代碼
#-*- coding:utf-8 -*-
#導入所需的子產品
from gensim import corpora,models,similarities
import jieba
from collections import defaultdict
#打開并讀取檔案
f1 = "D:/reptile/file/file_01.txt"
f2 = "D:/reptile/file/file_02.txt"
content1 = open(f1,encoding='UTF-8').read()
content2 = open(f2,encoding='UTF-8').read()
#對文檔進行分詞
data1 = jieba.cut(content1)
data2 = jieba.cut(content2)
#整理文檔格式,格式為:"詞語1 詞語2 ... 詞語n "(詞語之間用空格分隔)
str1 = ""
for item in data1:
str1+=item+" "
#print(str1)
str2 = ""
for item in data2:
str2+=item+" "
#print(str2)
#split預設分隔符為空格
str_all = [str1,str2]
text = [[word for word in str3.split()]
for str3 in str_all]
#計算詞語頻率
frequency = defaultdict(int)
for i in text:
for token in i:
frequency[token]+=1
#過濾詞頻為3的
'''
texts=[[word for word in text if frequency[token]>3]
for text in texts]
'''
#通過語料庫建立詞典
dictionary = corpora.Dictionary(text)
dictionary.save("D:/reptile/file/dict1.txt")
#加載要對比的文檔
f3 = "D:/reptile/file/file_03.txt"
content3 = open(f3,encoding='UTF-8').read()
data3 = jieba.cut(content3)
str3 = ""
for item in data3:
str3+=item+" "
new_data = str3
#doc2bow将檔案變成一個稀疏矩陣
new_vec = dictionary.doc2bow(new_data.split())
#對字典進行docbow處理,得到新的語料庫
corpus = [dictionary.doc2bow(j) for j in text]
#将corpus語料庫持久化到磁盤中,詞句可以删除
#corpora.MmCorpus.serialize("D:/reptile/file/New_Yuliaoku.mm",corpus)
#将新的語料庫通過TfidfModel處理,得到tfidf
tfidf = models.TfidfModel(corpus)
#求特征數
featureNum = len(dictionary.token2id.keys())
#SparseMatrixSimilarity 稀疏矩陣相似度
index = similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=featureNum)
#得到結果
sim = index[tfidf[new_vec]]
#列印結果
print(sim)
運作結果
[ 0.58554006 0.15430336]
該結果說明:file_03檔案與file_02的相似度為0.15430336,與file_01的相似度為0.58554006
作者:奔跑的金魚