python进行简单的文本相似度分析

python进行简单的文本相似度分析

本文利用gensim包、jieba包和TF-IDF模型进行简单的文本相似度分析。从而能够让我们确定,哪句话和哪句话相似程度是多少。文本相似度分析是自然语言处理中常用的一种分析方法,也是一个重要的分析方法。

TF-IDFM模型

1.模型的原理:是一个语料另一种表示;是一种语料的词权重表示,是词的一种加重技术;是一套自定义的计算模型方法。
2.直观的核心思想是:字词的重要性与文档中出现的频数成正比,与语料库中出现的频数成反比。

python 代码模块

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import jieba
from gensim import corpora,models,similarities

doc0 = "糖葫芦真的很好吃"
doc1 = "我就很喜欢糖葫芦"
doc2 = "北京的糖葫芦很有名"
doc3 = "这算是一个北京的特色小吃了吧"
doc4 = "你喜欢吃啥"
doc5 = "喜欢糖葫芦"

doc_test="我喜欢北京的糖葫芦"

all_doc = []
all_doc.append(doc0)
all_doc.append(doc1)
all_doc.append(doc2)
all_doc.append(doc3)
all_doc.append(doc4)
all_doc.append(doc5)

#对目标文档进行分词
all_doc_list = []
for doc in all_doc:
  doc_list = [word for word in jieba.cut(doc)]
  all_doc_list.append(doc_list)
  
#对要分析的文档进行分词
doc_test_list = [word for word in jieba.cut(doc_test)]
doc_test_list

#使用bag-of-words制作语料库,就是给分词后的词用,制作成字典样式,给每个词用编号
#   1.dictionary = corpora.Dictionary(abstracts):将语料库abstracts中出现的所有单词编号,将id,word映射存放如dictionary中;
dictionary = corpora.Dictionary(all_doc_list)   
dictionary

dictionary.token2id     #2.dictionary.token2id:词典中的id-word映射

corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]   #其中doc2bow将词汇转换为dictionary中的编号
corpus

#(010指的是,词袋中的顺序,1指的是该词在此句中出现的次数
doc_test_vec = dictionary.doc2bow(doc_test_list)
doc_test_vec                            

#相似度分析:使用TF-IDF模型对语料库建模
tfidf = models.TfidfModel(corpus)

#获取测试文档中,每个词的TF-IDF值
tfidf[doc_test_vec]

#对每个目标文档,分析测试文档的相似度
index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=len(dictionary.keys()))
sim = index[tfidf[doc_test_vec]]
sim

sorted(enumerate(sim), key=lambda item: -item[1])

结果如下:

[(1, 0.560515),
(2, 0.41126758),
(5, 0.32072034),
(3, 0.20707217),
(4, 0.060344156),
(0, 0.02470166)]

从模型执行结果来看,测试文档与doc1相似度最高,其次是doc2,与doc0的相似度最低。大家可以根据TF-IDF的原理,看看是否符合预期。

你可能感兴趣的:(Python)