python 文字相似度分析doc2bow
阿新 • • 發佈:2018-12-05
步驟:
1、讀取文件
2、對要計算的多篇文件進行分詞
3、對文件進行整理成指定的格式,方便後續進行計算
4、計算出詞語進行過濾
5、可選,對頻率低的詞語進行過濾
6、通過語料庫建立詞典
7、載入要對比的文件
8、將要對比的文件通過doc2bow轉換為稀疏向量
9、對稀疏向量進行進一步處理,得到新語料庫
10、通過T-IDFmodel將新語料庫進行處理,得到TF-IDF值
11、通過token2id得到特徵數
12、稀疏矩陣的相似度,從而建立索引,得到最終相似度結果
from gensim import corpora,similarities,models import jieba from collections import defaultdict ''' 1、讀取文件 2、對要計算的多篇文件進行分詞 3、對文件進行整理成指定的格式,方便後續進行計算 4、計算出詞語進行過濾 5、可選,對頻率低的詞語進行過濾 6、通過語料庫建立詞典 7、載入要對比的文件 8、將要對比的文件通過doc2bow轉換為稀疏向量 9、對稀疏向量進行進一步處理,得到新語料庫 10、通過T-IDFmodel將新語料庫進行處理,得到TF-IDF值 11、通過token2id得到特徵數 12、稀疏矩陣的相似度,從而建立索引,得到最終相似度結果 ''' #讀取文件 dic1=open('/root/python_test/mining/text1.txt').read() #分詞 cut1=jieba.cut(dic1) #組合成相應的格式 documents='' for cut_line in cut1: documents+=cut_line+' ' cur1=[[line for line in document.split()] for document in documents] frequent=defaultdict(int) for index in cur1: for token in index: frequent[token]+=1 #對頻率低的分詞過濾 curp1=[[word for word in index if frequent[token]>0] for index in cur1] #建立語料庫 corpora1=corpora.Dictionary(curp1) corpora1.save('/root/python_test/mining/text3') #載入對比的文件 dic2=open('/root/python_test/mining/sjk.txt').read() #分詞 cut2=jieba.cut(dic2) #組合格式 document1='' for cut_line1 in cut2: document1+=cut_line1+' ' document2=document1 #獲取對比檔案的稀疏向量 new_rec=corpora1.doc2bow(document2.split()) rec2=[corpora1.doc2bow(index) for index in cur1] #獲取語料庫特徵數,即個數 feat2=len(corpora1.token2id.keys()) #對語料庫建立tf-idf模型 tfidf=models.TfidfModel(rec2) #獲取索引 index1=similarities.SparseMatrixSimilarity(tfidf[rec2],num_features=feat2) #對比獲取相似性 sim=index1[tfidf[new_rec]] print(sim)