Pythonによるテキスト類似度解析

2201 ワード

**
一、テキスト分析プロセス:
1.文書2を読み込む.計算する複数の文書を分詞3.ドキュメントを指定形式に整理し、後続の計算を容易にする.語の頻度5を算出する.オプション、低周波数語をフィルタ6.コーパスを介して辞書7を作成する.比較するドキュメント8をロードする.比較するドキュメントをdoc 2 bowで疎ベクトル9に変換する.疎ベクトルをさらに処理する、新しい語彙ライブラリ、10を得る.TF-idfモデルによる新規ライブラリ処理によりtfidf 11が得る.token 2 idにより特徴数12が得る.疎行列の類似度を算出する、インデックス13を作成する.最終類似度結果を得る
二、コード例
from gensim import corpora,models,similarities
import jieba
from collections import defaultdict
#  1.    
doc1 = "F:/result/1.txt"
doc2 = "F:/result/3.txt"
d1 = open(doc1,encoding="utf-8").read()
d2 = open(doc2,encoding="utf-8").read()
#  2.             
data1 = jieba.cut(d1)
data2 = jieba.cut(d2)
#   3.            ,        
                  
data11 = ""
for item in data1:
    data11+=item+" "

data22 = ""
for item in data2:
    data22+=item+" "

documents = [data11,data22]
#  4.        
texts = [[word for word in document.split()]
        for document in documents]

frequency = defaultdict(int)
for text in texts:
    for token in text:
        frequency[token]+=1

#  5.   、       
texts = [[word for word in text if frequency[token]>1000]
 for text in texts]              #     

#  6.         
dictionary = corpora.Dictionary(texts)
dictionary.save("F:/result/wenben3.txt")

#  7.        
doc3 = "F:/result/4.txt"
d3 = open(doc3,encoding="utf-8").read()

#  8.         doc2bow       
data3 = jieba.cut(d3)
data33 = ""
for item in data3:
    data33+=item+""
new_doc = data33
new_vec = dictionary.doc2bow(new_doc.split())  #        
corpus = [dictionary.doc2bow(text) for text in texts]

#  10.  TF-idf         ,  tfidf
tfidf = models.TfidfModel(corpus)

#  11.  token2id     
featureNum = len(dictionary.token2id.keys())

#  12.         ,      
index = similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=featureNum)
sim = index[tfidf[new_vec]]
print(sim)


結果:42.85%の類似度
Building prefix dict from the default dictionary … Loading model from cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache Loading model cost 1.007 seconds. Prefix dict has been built succesfully. [0. 0.42851594]
Process finished with exit code 0