python文本相似度计算

相似度计算步骤::
读取要计算的多篇文档

  1. 对要计算的文档进行分词
  2. 对文档进行整理成指定格式,方便后续计算
  3. 计算出词语的频率
  4. 【可选】对频率低的词语进行过滤
  5. 通过语料库建立词典
  6. 加载要对比的文档
  7. 将要对比的文档,通过doc2bow转化为稀疏向量
  8. 对我们的稀疏向量进行进一步处理得到新语料库
  9. 将新语料库通过tfidfmodel进行处理,得到tfidf
  10. 通过token2id得到特征数
  11. 稀疏矩阵相似度,从而建立索引,
  12. 得到最终相似度结果

实现代码:

from gensim import corpora,models,similarities
import jieba
from collections import defaultdict
doc1='E:/programCode/d1.txt'
doc2='E:/programCode/d2.txt'
d1=open(doc1).read()
d2=open(doc2).read()
#对文本进行分词
data1=jieba.cut(d1)
data2=jieba.cut(d2)
#对分词的我文本整理成指定格式,"词语1  词语2  词语3...词语n"
data11=''
for item in data1:
    data11+=item+' '

data21=''
for item in data2:
    data21+=item+' '

#存储文档到列表
documents=[data11,data21]
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
'''
#如果词汇量过多,去掉低频词
texts=[[word for word in text if frequency[token]>3]
 for text in texts]
'''
#通过语料库建立词典
dictionary=corpora.Dictionary(texts)
dictionary.save('E:/programCode/wenben2.txt')
#加载要对比文档
doc3='E:/programCode/d3.txt'
d3=open(doc3).read()
data3=jieba.cut(d3)
data31=''
for item in data3:
    data31+=item+' '
new_doc=data31
new_vec=dictionary.doc2bow(new_doc.split())#转换为稀疏矩阵
#得到新的语料库
corpus=[dictionary.doc2bow(text) for text in texts]

ifidf=models.TfidfModel(corpus)
featureNUm=len(dictionary.token2id.keys())#得到特征数
index=similarities.SparseMatrixSimilarity(ifidf[corpus],num_features=featureNUm)
sim=index[ifidf[new_vec]]
print(sim)

老九门、盗墓笔记和鬼吹灯相似性比较

from gensim import corpora,models,similarities
import jieba
from collections import defaultdict
doc1='E:/programCode/laojiumen.txt'
doc2='E:/programCode/guichuideng.txt'
d1=open(doc1,encoding='utf-8').read()
d2=open(doc2,encoding='utf-8').read()
#对文本进行分词
data1=jieba.cut(d1)
data2=jieba.cut(d2)
#对分词的我文本整理成指定格式,"词语1  词语2  词语3...词语n"
data11=''
for item in data1:
    data11+=item+' '

data21=''
for item in data2:
    data21+=item+' '

#存储文档到列表
documents=[data11,data21]
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

#如果词汇量过多,去掉低频词
texts=[[word for word in text if frequency[token]>50]
 for text in texts]

#通过语料库建立词典
dictionary=corpora.Dictionary(texts)
dictionary.save('E:/programCode/wenben2.txt')
#加载要对比文档
doc3='E:/programCode/daomubiji.txt'
d3=open(doc3,encoding='utf-8').read()
data3=jieba.cut(d3)
data31=''
for item in data3:
    data31+=item+' '
new_doc=data31
new_vec=dictionary.doc2bow(new_doc.split())#转换为稀疏矩阵
#得到新的语料库
corpus=[dictionary.doc2bow(text) for text in texts]

ifidf=models.TfidfModel(corpus)
featureNUm=len(dictionary.token2id.keys())#得到特征数
index=similarities.SparseMatrixSimilarity(ifidf[corpus],num_features=featureNUm)
sim=index[ifidf[new_vec]]
print(sim)

 

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值