自然语言处理(NLP)之使用TF-IDF模型计算文本相似度

2023-05-16

自然语言处理(NLP)之使用TF-IDF模型计算文本相似度

所用数据集:ChnSentiCorp_htl_all.csv
语料库即存放稀疏向量的列表。
要注意的是,搜索文本text与被检索的文档共用一个特征词词典。

NLP计算文本相似度的方法,可以参考博文:https://blog.csdn.net/weixin_34101784/article/details/94639717

代码主要使用gensim库完成了分词、TF-IDF模型训练、文本相似度计算。
过程如下:

分词、建立特征词典、建立语料库、用TF-IDF模型处理语料库、计算搜索文本与被检索文本的相似度。
示例代码:

import csv
import jieba
from gensim import corpora, models, similarities

count = 0
wordListTop10 = []
with open('ChnSentiCorp_htl_all.csv', 'r', encoding='utf-8') as f:
    lines = csv.reader(f)  # lines的类型是<class '_csv.reader'>   指向csv文件的第一行

    next(lines)  # 指向csv文件的第二行  这个函数的参数是迭代器(iterator)和一个default
    # next(iterator, default)
    # default是迭代器已经到了最末端,再调用next()函数的输出值。不填这个参数的话,到了最末端还用next()的话会报错。

    for line in lines:
        # 只选取前10句话
        if count == 10:
            break

        segList = list(jieba.cut(line[1]))  # 分词      jieba.cut(line[1])对每一行列表的第二个元素进行分词,类型是generator
        wordListTop10.append(segList)  # 把前10句话的所有分词放进一个列表中,该列表为一个列表嵌套10个列表
        count += 1
#         print('/'.join(segList))       # '/'.join(segList)将segList即每句话的分词列表 转换成字符串,用’/‘将每个元素连接起来


"""
制作词袋模型(bag_of_word  (bow))
"""
# 制作字典
dictionary = corpora.Dictionary(wordListTop10)
# 可以通过token2id得到特征数字
# print(dictionary.token2id)

"""
制作数字向量类型的语料库(doc2bow)
"""
# ----> 将字符串转换成数字向量类型的词袋模型(稀疏向量)
# 源文件不做处理是一个字符串类型的语料库
corpus = [dictionary.doc2bow(doc) for doc in wordListTop10]


def semblance(text, corpus):
    # 对测试文本分词
    dic_text_list = list(jieba.cut(text))

    # 制作测试文本的词袋
    doc_text_vec = dictionary.doc2bow(dic_text_list)

    # 获取语料库每个文档中每个词的tfidf值,即用tfidf模型训练语料库
    tfidf = models.TfidfModel(corpus)

    # 对稀疏向量建立索引
    index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=len(dictionary.keys()))
    sim = index[tfidf[doc_text_vec]]  # 相当于sim = index.get_similarities(tfidf[doc_text_vec])
    print(sim)
    print(len(sim))
    # 按照相似度来排序
    sim_sorted = sorted(enumerate(sim, 1), key=lambda x: -x[1])  # enumerate(x, 1) 代表从1开始设立索引
    # 相当于sorted(enumerate(sim), key=lambda x: x[1], reverse=True
    print(sim_sorted)


#     for e,s in enumerate(sim,1):
#         print('text 与 doc%d 相似度为:%.6f' % (e, s))

if __name__ == '__main__':
    text = '这个商务大床房,感觉还不错'
semblance(text, corpus)

运行结果:

[0.         0.46778572 0.11295232 0.01399767 0.         0.05849655
 0.01257649 0.01730035 0.03707163 0.09614414]
10
[(2, 0.46778572), (3, 0.11295232), (10, 0.09614414), (6, 0.058496553), (9, 0.037071627), (8, 0.017300347), (4, 0.013997675), (7, 0.012576494), (1, 0.0), (5, 0.0)]

可以看到,text与数据集中第二条语句相似度最高。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自然语言处理(NLP)之使用TF-IDF模型计算文本相似度 的相关文章

随机推荐

  • OpenHD---低成本开源高清数字图传

    转载注明出处 文章目录 一 前言二 OpenHD简单介绍三 图传材料准备1 树莓派2 摄像头 排线 SD卡 读卡器4 网卡 四 硬件连接五 镜像刷写六 通电测试七 系统参数设置八 连接飞控九 关于二次开发十 最后 一 前言 这篇文章是对树莓
  • PS2手柄通讯协议解析---附资料和源码

    文章目录 一 PS2介绍二 PS2通讯协议介绍 xff08 1 xff09 PS2端口介绍 xff08 2 xff09 PS2通讯过程 三 基于STM32的PS2通信源码四 文档与源码下载链接 一 PS2介绍 今天就带大家来认识一下PS2的
  • Stm32延时与计时方法(HAL库)

    文章目录 一 延时的3种方法1 循环延时2 定时器中断延时与非中断延时 三 定时器中断式计时与延时二 定时器非中断式延时四 代码例程五 同系列博客 一 延时的3种方法 首先 xff0c 先了解一下什么延时 顾名思义 xff0c 延时即是延长
  • CAN通信知识梳理及在Stm32上的应用(HAL库)

    文章目录 一 CAN通信简介二 硬件连接三 CAN总线上的电平信号四 CAN帧的种类 xff08 1 xff09 遥控帧 xff08 2 xff09 数据帧 五 CAN的仲裁方法六 CAN在Stm32上的应用 xff08 1 xff09 C
  • C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)

    文章目录 C语言函数库 一 lt ctype h gt 二 lt math h gt 三 lt stdio h gt 四 lt stdlib h gt 五 lt time h gt 六 lt string h gt 文档资料 C语言函数库
  • 作品分享:基于STM32的温度报警器含源码、原理图、PCB文件、作品报告

    文章目录 一 前言二 材料准备三 硬件部分四 软件部分1 底层封装库2 中间层3 应用层 五 外壳设计六 资料链接 一 前言 该作品是我在华工电工开放实习的作品 xff0c 本作品由七部分组成 中央为Stm32F405RG芯片 xff0c
  • 基于时延法的麦克风阵列声源定位分析

    文章目录 一 关于麦克风阵列二 关于声源定位三 基于广义互相关 GCC 计算时延四 基于时延差的声源定位法1 近场模型2 远场模型 五 三维空间阵列的声源定位系统实现1 推导过程 六 六元圆形麦克风阵列声源定位七 相关链接 一 关于麦克风阵
  • STM32实现PWM输出与PWM输入捕获(HAL库)

    文章目录 一 前言二 STM32 定时器2 1 基本定时器2 1 1 功能与框图2 1 2 CubeMX配置 2 2 通用定时器2 2 1 功能与框图2 2 2 CubeMX配置 2 3 高级定时器2 3 1 功能与框图2 3 2 Cube
  • 宇树A1电池拆解分享

    文章目录 一 关于A1电池二 拆解过程2 1 结构设计2 2 电路方案2 3 电芯设计 三 相关链接 一 关于A1电池 今天的主角是宇树的A1电池 该电池主要用在宇树的A1机器狗上 xff0c A1主打的是运动性能 xff0c 最大持续奔跑
  • 大疆Mini1充电管家拆解分享

    文章目录 一 关于充电管家二 拆解过程 一 关于充电管家 御Mini充电管家外观简洁优雅 xff0c 最多可容纳三块电池进行充电 xff0c 在一块电池充满电后会自动进行下一块电池的充电 xff0c 支持电池的电量显示 除此之外 xff0c
  • 磁盘高级管理工具VDO (redhat8版本以上或者centos8以上)

    1 vdo简述 Virtual Data Optimizer 通过数据去重 压缩的方式来优化存储空间 VDO层放置在现有块存储设备上 xff0c 例如Raid设备 本地磁盘设备 LVM 或文件系统 放置在VDO层之上 xff0c 也可以将V
  • bootloader学习笔记---第一篇以stm32为例

    目录 一 bootloader的任务 二 bootloader开发的基础知识 段的概念 重定位的概念 散列文件的概念 异常向量 xff08 待补充 xff09 三 最简单的bootloader程序 四 使用汇编跳转 五 备注 一 bootl
  • 场景文本识别模型综述

    一 数据集的分析 一 训练数据集 大多数自然场景文字识别算法使用合成数据进行训练 两个常用的合成数据集是 MJSynth MJ 和 SynthText ST xff0c 分别包含890万和550万张训练样本 图1 不同比例的训练数据集 xf
  • 数据挖掘实验一使用matplotlib进行绘图

    曲线图 span class token keyword import span numpy span class token keyword as span np span class token keyword import span
  • 爬虫之爬取百度贴吧

    爬虫之爬取百度贴吧 直接示例代码 xff1a import requests from lxml import html etree 61 html etree from lxml import etree class Tieba obje
  • 正则表达式匹配开头和结尾(^、$、[^指定字符])

    1 匹配开头和结尾 代码功能 匹配字符串开头 匹配字符串结尾 示例1 xff1a 需求 xff1a 匹配以数字开头的数据 import re 匹配以数字开头的数据 match obj 61 re match 34 d 34 34 1hell
  • 人工智能主要分支

    人工智能主要分支 1 主要分支介绍 通讯 感知与行动是现代人工智能的三个关键能力 xff0c 在这里我们将根据这些能力 应用对这三个技术领域进行介绍 xff1a 计算机视觉 CV 人脸识别 自然语言处理 NLP 语音识别 语义识别 在 NL
  • re.sub()用法详解

    源代码 参数及其意义 xff1a def sub pattern repl string count 61 0 flags 61 0 34 34 34 Return the string obtained by replacing the
  • BERT模型的详细介绍

    1 BERT 的基本原理是什么 xff1f BERT 来自 Google 的论文Pre training of Deep Bidirectional Transformers for Language Understanding xff0c
  • 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度

    自然语言处理 NLP 之使用TF IDF模型计算文本相似度 所用数据集 xff1a ChnSentiCorp htl all csv 语料库即存放稀疏向量的列表 要注意的是 xff0c 搜索文本text与被检索的文档共用一个特征词词典 NL