1. 程式人生 > >python 文字相似度分析doc2bow

python 文字相似度分析doc2bow

步驟:
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)