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)

你可能感兴趣的:(Python)