主要步骤
文本相似度计算主要用到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)