赞
踩
gensim库,利用TFIDF算法来进行文本相似度计算,通过利用gensim库的corpora,models,similarities处理后续。
接下来:
我创建两个文本文件,作为语料库,另外再创建一个文本文件,作为需要对比的文件。(具体文件个数可自己调整,在本篇中使用三个)内容是百度随便找的,就拿稀疏向量和稀疏矩阵的百度百科吧。分别(d1,d2)(d3)d3去对比d1,d2。
简单操作步骤:如果只是验证过程,可以复制两段话到d1和d2中,然后分别从d1和d2文件中选择部分内容复制到d3,然后运行查看结果。
- import jieba
- from gensim import corpora,models,similarities
- from collections import defaultdict #用于创建一个空的字典,在后续统计词频可清理频率少的词语
- #1、读取文档
- doc1="./d1.txt"
- doc2="./d2.txt"
- d1=open(doc1,encoding='GBK').read()
- d2=open(doc2,encoding='GBK').read()
- #2、对要计算的文档进行分词
- data1=jieba.cut(d1)
- data2=jieba.cut(d2)
- #3、对分词完的数据进行整理为指定格式
- data11=""
- for i in data1:
- data11+=i+" "
- data21=""
- for i in data2:
- data21+=i+" "
- documents=[data11,data21]
- texts=[[word for word in document.split()] for document in documents]
- #4、 计算词语的频率
- frequency=defaultdict(int)
- for text in texts:
- for word in text:
- frequency[word]+=1
- '''
- #5、对频率低的词语进行过滤(可选)
- texts=[[word for word in text if frequency[word]>10] for text in texts]
- '''
- #6、通过语料库将文档的词语进行建立词典
- dictionary=corpora.Dictionary(texts)
- dictionary.save("./dict.txt") #可以将生成的词典进行保存
- #7、加载要对比的文档
- doc3="./d3.txt"
- d3=open(doc3,encoding='GBK').read()
- data3=jieba.cut(d3)
- data31=""
- for i in data3:
- data31+=i+" "
- #8、将要对比的文档通过doc2bow转化为稀疏向量
- new_xs=dictionary.doc2bow(data31.split())
- #9、对语料库进一步处理,得到新语料库
- corpus=[dictionary.doc2bow(text)for text in texts]
- #10、将新语料库通过tf-idf model 进行处理,得到tfidf
- tfidf=models.TfidfModel(corpus)
- #11、通过token2id得到特征数
- featurenum=len(dictionary.token2id.keys())
- #12、稀疏矩阵相似度,从而建立索引
- index=similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=featurenum)
- #13、得到最终相似结果
- sim=index[tfidf[new_xs]]
- print(sim)
运行效果:(由于找的内容是同一个百度百科里的,可以看出来d3与d1,d2的相似度分别是16.6%和15.7%)
从本次记录中可以思考一下,毕业论文查重或许也是类似原理,查重的语料库很巨大,将你的一篇论文与它众多论文进行对比,最后可以通过相关算法(也许就一个平均值)来计算最终相似度。所以可以思考思考如何应对。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。