Python文本相似度计算

主要步骤

文本相似度计算主要用到gensim和jieba两个Python库,重要的是思想,要理解如何利用线性代数的知识解决相似度计算问题。

其主要步骤如下:
* 读取文档
* 对要计算的多篇文档进行分词
* 对文档进行整理成制定格式,方此案后续进行计算
* 计算出词语的频率
* 【可选】对频率低的词语进行过滤
* 通过语料库添加字典
* 加载要对比的文档
* 将要对比的文档通过doc2bow转化为稀疏向量
* 对稀疏向量进行进一步处理,得到新语料库
* 对新语料库通过‘tfidfmodel’进行处理,得到tfidf
* 通过token2id得到特征数
* 稀疏矩阵相似度,从而建立索引

* 得到最终相似度结果

代码
# 导入所需Python库
from gensim import corpora,models,similarities
import jieba
import urllib.request
from collections import defaultdict

# 1.读取文档
d1=urllib.request.urlopen("http://127.0.0.1/ljm.html").read().decode("utf-8","ignore")
d2=urllib.request.urlopen("http://127.0.0.1/gcd.html").read().decode("utf-8","ignore")

# 2.对要计算的多篇文档进行分词
data1=jieba.cut(d1)
data2=jieba.cut(d2)

# 3.整理文档格式,方便后续计算
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]

# 4.计算词语频率
frequency=defaultdict(int)
for text in texts:
    for token in text:
        frequency[token]+=1
# 5.过滤词频
texts=[[token for token in text if frequency[token]>25]
        for text in texts]

# 6.通过corpora语料库建立词典
dictionary=corpora.Dictionary(texts)
dictionary.save('D:/Python35/12345.txt') 

# 7.加载要对比文档,同时处理成规定格式
# doc3="D:/Python35/d3.txt"
d3=urllib.request.urlopen("http://127.0.0.1/dmbj.html").read().decode("utf-8","ignore")
data3=jieba.cut(d3)
data31=""
for item in data3:
    data31+=item+" "
new_doc=data31

# 8.将要对比文档通过doc2bow转化为稀疏向量
new_vec=dictionary.doc2bow(new_doc.split())

# 9.建立新的语料库
corpus=[dictionary.doc2bow(text) for text in texts]
corpora.MmCorpus.serialize('D:/Python35/6562.txt',corpus) 

# 10.强新语料库通过tfidfmodel进行计算,得到tfidf
tfidf=models.TfidfModel(corpus)
# 11.通过token2id得到特征数
featureNum=len(dictionary.token2id.keys())

# 12.计算稀疏矩阵像是度,建立索引
index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=featureNum)
# 13.得到相似性
sims=index[tfidf[new_vec]]

print(sims)
  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值