当前位置:   article > 正文

python+jieba+tfidf算法 文本相似度_data1=jieba.cut(d1)

data1=jieba.cut(d1)
jieba是python第三方库,用于自然语言处理,对文本进行分词,当然也有其他的分词库。

gensim库,利用TFIDF算法来进行文本相似度计算,通过利用gensim库的corpora,models,similarities处理后续。

  • 基本思路:jieba进行分词,整理为指定格式->gensim库将要对比的文档通过doc2bow转化为稀疏向量->再通过models中的tf-idf将语料库进行处理->特征值和稀疏矩阵相似度建立索引->最后的到相似结果。

接下来:

我创建两个文本文件,作为语料库,另外再创建一个文本文件,作为需要对比的文件。(具体文件个数可自己调整,在本篇中使用三个)内容是百度随便找的,就拿稀疏向量和稀疏矩阵的百度百科吧。分别(d1,d2)(d3)d3去对比d1,d2。

简单操作步骤:如果只是验证过程,可以复制两段话到d1和d2中,然后分别从d1和d2文件中选择部分内容复制到d3,然后运行查看结果。

  1. import jieba
  2. from gensim import corpora,models,similarities
  3. from collections import defaultdict #用于创建一个空的字典,在后续统计词频可清理频率少的词语
  4. #1、读取文档
  5. doc1="./d1.txt"
  6. doc2="./d2.txt"
  7. d1=open(doc1,encoding='GBK').read()
  8. d2=open(doc2,encoding='GBK').read()
  9. #2、对要计算的文档进行分词
  10. data1=jieba.cut(d1)
  11. data2=jieba.cut(d2)
  12. #3、对分词完的数据进行整理为指定格式
  13. data11=""
  14. for i in data1:
  15. data11+=i+" "
  16. data21=""
  17. for i in data2:
  18. data21+=i+" "
  19. documents=[data11,data21]
  20. texts=[[word for word in document.split()] for document in documents]
  21. #4、 计算词语的频率
  22. frequency=defaultdict(int)
  23. for text in texts:
  24. for word in text:
  25. frequency[word]+=1
  26. '''
  27. #5、对频率低的词语进行过滤(可选)
  28. texts=[[word for word in text if frequency[word]>10] for text in texts]
  29. '''
  30. #6、通过语料库将文档的词语进行建立词典
  31. dictionary=corpora.Dictionary(texts)
  32. dictionary.save("./dict.txt") #可以将生成的词典进行保存
  33. #7、加载要对比的文档
  34. doc3="./d3.txt"
  35. d3=open(doc3,encoding='GBK').read()
  36. data3=jieba.cut(d3)
  37. data31=""
  38. for i in data3:
  39. data31+=i+" "
  40. #8、将要对比的文档通过doc2bow转化为稀疏向量
  41. new_xs=dictionary.doc2bow(data31.split())
  42. #9、对语料库进一步处理,得到新语料库
  43. corpus=[dictionary.doc2bow(text)for text in texts]
  44. #10、将新语料库通过tf-idf model 进行处理,得到tfidf
  45. tfidf=models.TfidfModel(corpus)
  46. #11、通过token2id得到特征数
  47. featurenum=len(dictionary.token2id.keys())
  48. #12、稀疏矩阵相似度,从而建立索引
  49. index=similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=featurenum)
  50. #13、得到最终相似结果
  51. sim=index[tfidf[new_xs]]
  52. print(sim)

运行效果:(由于找的内容是同一个百度百科里的,可以看出来d3与d1,d2的相似度分别是16.6%和15.7%)

 

从本次记录中可以思考一下,毕业论文查重或许也是类似原理,查重的语料库很巨大,将你的一篇论文与它众多论文进行对比,最后可以通过相关算法(也许就一个平均值)来计算最终相似度。所以可以思考思考如何应对。

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/584149
推荐阅读
相关标签
  

闽ICP备14008679号