自然语言处理实战项目7-利用层次聚类方法做文本的排重,从大量的文本中找出相似文本

news2024/11/18 22:45:05

大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目7-利用层次聚类方法做文本的排重,从大量的文本中找出相似文本。随着互联网技术的不断发展,越来越多的数据被广泛地应用在各个领域中。而文本数据是其中之一,文本排重是对这些数据进行加工的一个重要的环节。为了减少计算资源的浪费,缩短运行时间,利用层次聚类算法实现文本排重是一个不错的选择。

我们工作中会遇到描述相似的句子,但是直接找重复的,又因为他们不是完全相同而无法直接找到,而已不是模糊匹配那种,因为有的文本表述是少了某些字的,我们要找到这些相似的句子。

一、层次聚类算法

层次聚类算法是一种基于距离度量的聚类方法。它的核心思想是对所有的数据点进行两两之间的距离计算,然后将距离最小的两个点合并成一个新的点,直到所有数据点都被合并到同一个簇中。最终,聚类结果映射为一棵层级树状图,我们可以通过树状图来查看不同簇之间的层次关系。

层次聚类算法有两种形式:凝聚型聚类和分裂型聚类。凝聚型聚类从单个数据点开始,逐步合并不同的数据点,直到整个数据集合被合并成一个大的簇。分裂型聚类从一个大的簇开始,将数据点分成两个或多个较小的簇。

层次聚类算法的优点是可以处理任意类型的数据,并且能够构建出清晰明了的层级关系。相比于其他聚类算法,它不需要预先指定簇的数量,并且可以灵活调整参数来控制聚类的粒度。

但层次聚类算法也有一些缺陷,它的时间复杂度高,尤其是在处理大数据集时。此外,基于距离度量的聚类算法还需要进行数据归一化和距离度量的选择,这些都直接影响到聚类效果。

二、层次聚类算法的步骤

层次聚类算法是一种基于对象间距离的聚类方法。该算法将数据对象以类的景观组织在起来,将所有的聚集分成不同的组或类,成为一个层级树状结构。

步骤如下:

1、将所有数据对象视为单独一个类;

2、计算所有类之间的距离并再次组合;

3、重复直至所有对象都被组合成一个单独的类。

 三、层次聚类算法实现文本排重

数据说明,我建立一个文本数据:test.csv

text
你好,很高兴认识你
我也很高兴认识你
层次聚类算法原理是什么
文本排重是对这些数据进行加工的一个重要的环节
层次聚类算法原理
层次聚类算法是一种基于对象间距离的聚类方法
将所有数据对象视为单独一个类
计算所有类之间的距离并再次组合
为了更好地理解层次聚类算法的应用
我们在此提供一个简单的中文数据样本
所有数据对象看作单独的一个
找到表格中的相似句子
代码和目录结构以供参考
所有数据对象看作单独一个类
中国与中亚五国的合作成功密码
美国OpenAI发表GPT4
层次聚类算法其实是一种基于对象间距离的聚类方法

层次聚类算法实现:

# 必要的库
import pandas as pd
import numpy as np
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from scipy.linalg import norm
from sklearn.metrics.pairwise import cosine_similarity
from scipy.cluster.hierarchy import linkage, fcluster
from collections import defaultdict

# 设置常量
MAX_DF = 0.8 # 移除文档频率高于max_df的词语
MIN_DF = 0.01 # 将出现在少于min_df文档中的词语移除
STOP_WORDS = [line.strip() for line in open('stop_words.txt', encoding = 'utf-8').readlines()]

# 数据载入
data = pd.read_csv('test.csv', encoding = 'utf-8')
texts = data['text'].tolist()

# 分词
texts_fenci = []
for text in texts:
    words = jieba.cut(text)
    text_fenci = ''
    for word in words:
        if word not in STOP_WORDS:
            text_fenci += word + ' '
    texts_fenci.append(text_fenci)

# 文本向量化转换
vectorizer = TfidfVectorizer(max_df = MAX_DF, min_df = MIN_DF)
tf_idf = vectorizer.fit_transform(texts_fenci)

# 计算余弦距离
tf_idf_norm = tf_idf.toarray() / np.linalg.norm(tf_idf.toarray(), axis = -1).reshape(-1, 1)
cos_dist = cosine_similarity(tf_idf_norm)

# 层次聚类
linkage_matrix = linkage(cos_dist, method='ward', metric='euclidean')
clusters = fcluster(linkage_matrix,t=0.2,criterion='distance')

# 相似句子标注
cluster_dict = defaultdict(list)
for i, label in enumerate(clusters):
    cluster_dict[label].append(i)
for _ , idx in cluster_dict.items():

    if len(idx) > 1:
        print('相似句子为:', end = ' ')
        for i in idx:
            print(texts[i], end = ' ')
        print('\n')

运行结果:

相似句子为: 层次聚类算法是一种基于对象间距离的聚类方法 层次聚类算法其实是一种基于对象间距离的聚类方法 

相似句子为: 所有数据对象看作单独的一个 所有数据对象看作单独一个类 

代码中我们可以控制clusters = fcluster(linkage_matrix,t=0.2,criterion='distance')中t=0.2的值,这里越小说明层次分的越细,越多分的越少,就会把不太相似的也分到一起。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/541696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ar在汽车维修行业的应用场景

由于AR增强现实技术的易用性,在汽车产业链中,已处处可见AR技术的踪影,像汽车设计AR远程协同,汽车装配AR远程指导,汽车维修AR远程协助等等,那么下面为详细介绍AR增强现实技术在汽车制造领域的应用。 环境/物…

实力在线 | 赛宁网安连续三年入选《中国网络安全市场全景图》

​​近日,国内专业安全机构数说安全正式发布了《2023年中国网络安全市场全景图》(以下简称全景图)。此次全景图分类架构涵盖了产品、解决方案、应用场景、服务4个维度,覆盖了目前我国网络安全行业所有成熟的细分市场。 赛宁网安凭…

Postman实现数字签名,Session依赖, 接口依赖, 异步接口结果轮询

Script(JS)为Postman赋予无限可能 基于Postman 6.1.4 Mac Native版 演示结合user_api_demo实现 PS 最近接到任务, 要把几种基本下单接口调试和持续集成一下, 做个常规功能验证, 研究了下发现, 不同的下单途径, 有的需要登录(Session依赖), 有的需要验签(使用数字签名的微服务),…

用本地机做跳板使服务器连接外网【mac】

用自己的电脑做跳板使服务器连接外网 前提整体流程连接服务器配置服务器配置自己的电脑 前提 很多时候我们的服务器只能联内网,但是没法登外网,这样pip,conda 啥的都没法用,很麻烦。 一个简单的解决方法就是用自己的电脑作为跳板…

补充点【数据分析统计学知识点】

数据分析所需的统计学笔记 0.数据分析师拿到数据 第一利器:描述性统计信息 第二利器:对比分析法 第三利器:指标体系-要素拆解,维度拆解 第四利器:相关分析 第五利器:趋势预测 1.均值 2.中位数 3.众数…

基于Java+SpringBoot+vue的口腔管家平台设计与实现

博主介绍:擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案例…

Hadoop 3.0.0的集群搭建和Hive 3.1.3的安装

Hi,朋友们,我们又见面了,这一次我给大家带来的是Hadoop集群搭建及Hive的安装。 说明一下,网上有很多的教程,为什么我还要水? 第一,大多数的安装都是很顺利的,没有疑难解答。 第二&#xff0c…

分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

01.redis扩容 由于redis的容量也是有限的,所以,就会有扩容的操作。也就好像内存中扩容一样。redis有分片这种说法,具体实现操作如下: 第一步:首先在/usr/local/src中去找到redis文件夹。cd /usr/local/src 而后进入re…

瑞吉外卖 - 菜品信息分页查询功能(17)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

开源大语言模型完整列表

Large Language Model (LLM) 即大规模语言模型,是一种基于深度学习的自然语言处理模型,它能够学习到自然语言的语法和语义,从而可以生成人类可读的文本。 LLM 通常基于神经网络模型,使用大规模的语料库进行训练,比如使…

【Linux进阶之路】基本指令(下)

文章目录 一. 日志 date指令——查看日期基本语法1基本语法2cal指令——查看日历常见选项 二 .find——查找文件常用选项-name显示所有文件显示指定类型的文件 三.grep——行文本过滤工具语法常见的用法补充知识——APP与服务器的联系 四.打包压缩与解压解包zip与unzipzipunzip…

又一高速AD/DA数据采集卡问世,何不了解一下?

FMC190 子卡集成 2 通道 3Gsps 采样率,14 位 AD,2 通道12.8Gsps 16 位DA。板载时钟芯片 HMC7044,可以提供JESD204B所需要的各种时钟。具有同步/触发功能,模拟信号采用 SSMA 射频连接器输入和输出。板载时钟芯片为 HMC7044&#xf…

Unity UI -- (3)管理屏幕大小和锚点

在前面我们探索了一些基本的文本格式。我们需要考虑一个问题,这个文本在屏幕大小发生变化时该如何适应呢? 在Unity中,我们可以使用Canvas和Anchor Point(锚点)系统来确保UI元素总是出现在正确的位置,不管它…

Arduino ESP32的串口

Arduino的ESP32的三个串口 ESP32的三个串口 在Arduino的核心中有三个串口,分别是Serial,Serial1,和Serial2. 当然ESP32也可以使用软串口。但硬件串口更稳健(我这样理解)。但Serial1这个串口不能使用,因为…

腾讯云轻量应用服务器公网带宽速度如何?

腾讯云轻量应用服务器网速怎么样?轻量应用公网IP带宽速度与地域有关,中国大陆地域如北京、上海、广州等地域采用多线BGP网络,保障轻量应用服务器的速度,中国香港国际CN2高速网络。中国内地的地域大家是完全不用担心,大…

Eureka实战入门

spring cloud的版本 spring cloud的版本是根据springboot版本确定的 Spring Cloud Dalston, Edgware, Finchley, and Greenwich 版本不再更新了 版本 SNAPSHOT:开发版本,最新版本 Milestone:大版本在发布前的里程碑的版本 Release candi…

usb摄像头驱动-core层hub.c

usb摄像头驱动-core层hub.c 文章目录 usb摄像头驱动-core层hub.cusb_hub_inithub_probehub_eventport_eventhub_port_connect_changehub_port_connectusb_new_deviceannounce_device 在USB摄像头驱动中,hub.c文件扮演着USB集线器(Hub)驱动的角…

<数据结构>顺序表和链表的比较|缓存命中率

💭前言:通过之前对顺序表和链表的实现,我们可以发现在增删查改某些操作上两者的效率前言有所差异,本篇文章将总结二者的异同。 顺序表的实现http://t.csdn.cn/Lxyg2单链表的实现http://t.csdn.cn/rHgjG双链表的实现http://t.csdn.…

国考省考行测:现期比重,基期比重

国考省考行测: 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和行测的重要知识点 遇到寒冬&am…

【c++】位图与布隆过滤器

一.位图 1.位图的概念 给 40 亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这 40 亿个数中。【腾讯】 刚开始许多同学能想到的方法有: 1. 遍历,时间复杂度 O(N) 2. 排序 (O(NlogN)) &#x…