Python比较文本相似度的7种方法(详细)

本文介绍了多种文本相似度计算方法,包括词袋模型、TF-IDF、余弦相似度、Python自带比较相似度函数、Word2Vec、JS距离及simtext库的使用,详细解析了每种方法的实现步骤与应用场景。
该文章已生成可运行项目,

1词袋模型

from gensim import corpora
from gensim import models
from gensim import similarities
#from corpora.corpus import Corpus
# 1 分词
# 1.1 历史比较文档的分词
all_location_list = []
for doc in location_list:
    doc_list = [word for word in jieba.cut_for_search(doc)]
    # doc_list = [word for word in jieba.cut(doc)]
    all_location_list.append(doc_list)

# 1.2 测试文档的分词

doc_test="A市A市经济学院体育学院"
doc_test_list = [word for word in jieba.cut_for_search(doc_test)]
# doc_test_list = [word for word in jieba.cut(doc_test)]

# 2 制作语料库
# 2.1 获取词袋
dictionary = corpora.Dictionary(all_location_list)

# 2.2 制作语料库
# 历史文档的二元组向量转换
corpus = [dictionary.doc2bow(doc) for doc in all_location_list]
# 测试文档的二元组向量转换
doc_test_vec = dictionary.doc2bow(doc_test_list)

# 3 相似度分析
# 3.1 使用TF-IDF模型对语料库建模
tfidf = models.TfidfModel(corpus)
# 获取测试文档中,每个词的TF-IDF值
tfidf[doc_test_vec]

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

# 根3.3 据相似度排序
sorted(enumerate(sim), key=lambda item: -item[1])

2TF-IDF

import jieba
from gensim import corpora,models,similarities


all_location_list = []
for doc in location_list:
    doc_list = [word for word in jieba.cut_for_search(doc)]
    all_location_list.append(doc_list)
    
# 制作语料库,获取词袋
dictionary = corpora.Dictionary(all_location_list)
corpus = [dictionary.doc2bow(doc) for doc in all_location_list]
# 使用TF-IDF模型对语料库建模
tfidf = models.TfidfModel(corpus)

#特征数
featureNUM = len(dictionary.token2id.keys())
#通过TfIdf对整个语料库进行转换并将其编入索引,以准备相似性查询
index = similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=featureNUM)
#稀疏向量.dictionary.doc2bow(doc)是把文档doc变成一个稀疏向量,[(0, 1), (1, 1)],表明id为0,1的词汇出现了1次,至于其他词汇,没有出现。

doc_test= 'A市A市魅力之城商铺无排烟管道,小区'
doc_test_list = [word for word in jieba.cut_for_search(doc_test)]
# 测试文档的二元组向量转换
new_vec = dictionary.doc2bow(doc_test_list)
# 获取测试文档中,每个词的TF-IDF值
tfidf[new_vec]
#计算向量相似度
sim = index[tfidf[new_vec]]
print(sim)

for i in range(len(location_list)):
    doc_test= location_list[i]
    
    #     w_ID = biaoge2_paqu.loc[i,'问题ID']
    w_ID = biaoge2.loc[i,'问题ID']
    if w_ID:
        pass
    else:
#         p = biaoge2_paqu['问题ID'].max() + 1
#         biaoge2_paqu.loc[i,'问题ID'] = p
#     w1_ID = biaoge2_paqu.loc[i,'问题ID']
    
        p = biaoge2['问题ID'].max() + 1
        biaoge2.loc[i,'问题ID'] = p
    w1_ID = biaoge2.loc[i,'问题ID']
    
    
    doc_test_list = [word for word in jieba.cut_for_search(doc_test)]
    # 测试文档的二元组向量转换
    new_vec = dictionary.doc2bow(doc_test_list)
    # 获取测试文档中,每个词的TF-IDF值
    tfidf[new_vec]
    #计算向量相似度
    sim = index[tfidf[new_vec]]
    for j in range
本文章已经生成可运行项目
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值