机器学习 -- 余弦相似度

场景

我有一个 页面如下(随便找的):

我的需求是拿到所有回答的链接,在这里插入图片描述
再或者我在找房子网上,爬到所有的房产信息,我们并不想做过多的处理,我只要告诉程序,请帮我爬一个类似 xxx 相似度为0.5的就可以了,然后我自会写一小段代码去给数据清洗,这就免去了每次不同网站写不同的一套脚本的痛苦。这里就用到了 余弦相似度

余弦相似度

余弦相似度,又称为余弦相似性,是通过测量两个向量的夹角的余弦值来度量它们之间的相似性。两个方向完全相同的向量的余弦相似度为1,而两个彼此相对的向量的相似度为-1。 注意,它们的大小并不重要,因为这是方向的度量。

余弦定理:
在这里插入图片描述
所以余弦的计算公式如下:
在这里插入图片描述
有向量 a,b 他们的余弦值的公式是:
在这里插入图片描述
这个可能和k近邻算法听起来有些相似。但是也有不同

余弦相似度通常用于计算两个向量间的相似度,尤其常见于文本处理中。它通过测量两个向量间夹角的余弦值来判断它们的相似度。而k近邻算法是一种基于实例的学习或非泛化学习,它不试图构造一个通用内部模型,而是简单地存储实例数据。在分类时,新的数据点会被分配到它最近邻的类别。

所以余弦相似度更适合比较文本的相似程度,而k近邻算法常用于分类问题

优缺点

余弦相似度是一种测量两个向量在方向上的相似度的度量。它广泛用于文本分析,特别是在计算文档或文本片段之间的相似性时。

优点

1.不受大小影响:余弦相似度仅考虑向量间的角度,而不受其大小(即向量的长度或幅度)的影响,这使得它特别适用于文本数据,其中词频(长度)可能不是很重要。

2.效率较高:在稀疏数据集(如文本数据)上计算余弦相似度通常比其他相似度测量更高效。
适合高维数据:它适用于高维数据集,例如文本数据,其中每个维度代表一个不同的单词。

缺点

1.不考虑非共有特征:仅考虑两个向量共有的特征(即同时在两个向量中出现的元素),这可能会忽略某些重要信息。

2.对数据分布敏感:在某些情况下,数据的分布会影响余弦相似度的结果,尤其是当两个向量的长度相差悬殊时。

业务应用

1.获取html文本内容,我有两个html文件(获取html很容易,自动化和http请求都可以做到,但是要注意robot.txt协议),h6是一个整体的大html ,h7是案例html,我要拿的是 所有回答的链接,所以h7就是随机一个链接的html

file_path = 'D:/herche_ai/h6.html'  
with open(file_path, 'r', encoding='utf-8') as file:
    html_content = file.read()


file_path = 'D:/herche_ai/h7.html' 
with open(file_path, 'r', encoding='utf-8') as file:
    target_html = file.read()
  1. 构建特征向量,我们利用BeautifulSoup将所有元素都趴下来,随后我们将其转为字符串表示
def build_feature_vector(html):
    """构建特征向量"""
    soup = BeautifulSoup(html, 'html.parser')
    elements = soup.find_all()
    elements_str = [element_to_string(el) for el in elements]
    return elements_str, elements
def element_to_string(element):
    """将元素转换为字符串表示"""
    return f"{element.name} {' '.join([f'{k}={v}' for k, v in element.attrs.items()])}"

3.构建源html和目标html的特征

# 构建原始html特征向量
    html_elements_str, html_elements = build_feature_vector(html)
# 构建目标html特征向量
    target_elements_str, _ = build_feature_vector(target_html)

4.处理文本

    vectorizer = CountVectorizer().fit(html_elements_str + target_elements_str)

CountVectorizer主要用于文本处理,它通过计数每个单词在文本中出现的频率来将文本转换为数值向量。这个过程可以分为以下几个步骤:
分词:将每个文本(在这种情况下是HTML元素的字符串表示)分割成单词或标记。
构建词汇表:从所有文本中提取出所有不同的单词,构建一个词汇表。
计数:对于每个文本,计算词汇表中每个单词的出现次数。
转换为向量:每个文本最终被转换为一个向量,向量的每个元素代表词汇表中对应单词的出现次数。

5.将两个html文本转为向量数值

 html_vec = vectorizer.transform(html_elements_str)
 target_vec = vectorizer.transform(target_elements_str)

6.比较相似度并且拿出相似度大于0.5的元素

similarities = cosine_similarity(target_vec, html_vec)
    similar_elements = []
    for index, similarity in enumerate(similarities[0]):
        if similarity >= threshold:
            similar_elements.append(html_elements[index])
    return similar_elements

7.顺利拿到h6 html中所有和h7相似的元素

结束

余弦相似度应用爬虫场景结束

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

千寻位置北斗高精度定位方案获40多家车企品牌订单

千寻位置北斗高精度定位方案获40多家车企品牌订单,在30多款车型上批量交付 千寻位置北斗高精度定位方案在30多款车型上批量交付,包括长城汽车、上汽、一汽红旗、吉利、广汽埃安、小鹏、理想、高合、智己、零跑等汽车厂商的多个智能汽车车型。 进入高速公…

棱镜七彩入选中国数字安全能力图谱(精选版)“SCA”领域

近日,数世咨询正式发布2023年度中国数字安全能力图谱(精选版),棱镜七彩凭借在软件供应链安全领域领先的研发实力与创新能力,入选本次图谱应用场景板块SCA领域。 中国数字安全能力图谱”旨在反映中国数字安全产业市场规…

抖店关了一段时间,重新做还能做起来吗?相关抖店运营问题解答!

我是王路飞。 之前有很多新手脑子一热,跟风开通了抖店,保证金什么的也都交了。 后来发现自己做不起来,而且中间可能又忙着别的项目了,就把店铺给关闭了一段时间, 现在店铺又重开了,所以私信我&#xff0…

vue实现-年、月、日、时、分、秒、星期?

一、文章引导 #mermaid-svg-nP4oT3Y4d6oaxUsg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-nP4oT3Y4d6oaxUsg .error-icon{fill:#552222;}#mermaid-svg-nP4oT3Y4d6oaxUsg .error-text{fill:#552222;stroke:#55222…

现代软件测试中的自动化测试工具

自动化测试的重要性和优势 引言:随着软件开发的不断发展,自动化测试工具在现代软件测试中扮演着重要角色。提高效率:自动化测试可以加快测试流程,减少人工测试所需的时间和资源。提升准确性:自动化测试工具可以减少人…

恭喜Zhilong LI同学通过Oracle 19c OCP考试

Oracle 19c OCP两门科目考试成绩、证书展示: Oracle 19c OCP 1z0-082考试详情 Oracle 19c OCP 1z0-083考试详情

PHP 常见设计模式及示例

1.单例模式 单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 单例模式的要点有三个: 一是某个类只能有一个实例;二是它必须自…

浏览器不支持 css 中 :not 表达式的解决方法

问题 使用 :not 表达式的样式在不同浏览器中存在不生效的问题。 原因 不生效是因为浏览器版本较低所导致的。(更多详细信息请看:MDN) 解决方法 初始写法: .input-group:not(.user-name, .user-passwork){width: auto; }改成…

P1067 [NOIP2009 普及组] 多项式输出————C++

目录 [NOIP2009 普及组] 多项式输出题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 [NOIP2009 普及组] 多项式输出 题目描述 一元 n n n 次多项式可用如下的表达式表示: f ( x ) a n x n a …

2024年软考网络工程师如何备考?考什么?

先看一下这知识点总结图,在备考复习前大致简单了解一遍! 网工考试时间安排: 网工每年考两次,5月考试一次,11月考试一次 第一步: 通读教程(《网络工程师》),首先对教程中…

怎么修改照片尺寸?来分享3款实用的工具!

在当今的自媒体时代,照片是吸引读者眼球的重要元素之一。有时候,我们需要在不同的平台上传照片,但不同的平台对照片的尺寸要求却不尽相同。为了满足这些要求,我们经常需要修改照片的尺寸。那么,如何快速、准确地修改照…

Java:手工触发FullGC及堆占用过高常用分析方法

目录 一、手工触发FullGC方式 1、通过代码 2、通过工具 二、堆占用过高常用分析方法 1、查看堆占用情况 2、手工触发FullGC 3、查看对象占用堆的情况 4、分析可疑对象 使用如下命令查看java进程中内存的使用情况 jstat -gcutil <pid> 5000 发现运行中的java进程堆…

【精简】Vue 一个@click时间绑定多个点击事件

一、方案 多个方法之间使用逗号分隔&#xff08;经测试其实逗号和分号都可以&#xff09; <el-buttonclick"m1(),m2()">m1(){console.log("11");},m2(){console.log("22")},二、效果 三、猜想 经过debugger测试 好像m1和m2执行是按clic…

来了!私域流量转化差4大的原因

很多做私域的朋友常常苦恼的问题&#xff0c;辛辛苦苦把流量从公域引到私域&#xff0c;但是转化特别差&#xff1b;私域里躺着大量的沉默用户&#xff0c;不知道该如何激活&#xff1b;私域业务整体产出特别低&#xff0c;在犹豫要不要放弃等...... 要解决这些问题&#xff0c…

基于ssm智慧社区停车管理系统设计与实现【附源码】

基于ssm智慧社区停车管理系统设计与实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&am…

QT项目生成CSV文件保存数据

以下接口包括按时间生成CSV总表和每次测试根据SN和时间区分的子文件夹&#xff08;包括子CSV和子图片存放地址&#xff09; 接口定义 ///CSV文件保存// //测试数据总表//添加数据,用";"分隔开bool TotalCSVDataAdd(QString data);//测试完毕&#xff0c;跳转到下一行…

小redbook.item_get_video API在电商中的市场潜力与前景

小redbook.item_get_video API在电商中的市场潜力与前景 随着互联网的快速发展和普及&#xff0c;电商行业经历了翻天覆地的变化。在这个过程中&#xff0c;数据成为了电商企业竞争的核心资源。小redbook.item_get_video API作为小红书平台提供的一种数据接口服务&#xff0c;…

Shell 正则表达式及综合案例及文本处理工具

目录 一、常规匹配 二、常用特殊字符 三、匹配手机号 四、案例之归档文件 五、案例之定时归档文件 六、Shell文本处理工具 1. cut工具 2. awk工具 一、常规匹配 一串不包含特殊字符的正则表达式匹配它自己 例子&#xff0c;比如说想要查看密码包含root字符串的&#x…

DNS解析原理和k8s DNS 实践

1. 问题背景 1.1 域名解析异常 近期开发的一个功能&#xff0c;需要在k8s集群容器环境中调用公司内部api&#xff0c;api提供了内网域名&#xff0c;解析内网域名异常导致请求超时&#xff0c;因此梳理了下DNS的知识点。 可以先看到下面&#x1f447;这段配置&#xff0c;修…

.NetCore部署微服务(二)

目录 前言 概念 一 Consul注册服务中心 1.1 consul下载 1.2 consul运行 二 服务注册 2.1 安装Consul包 2.2 修改配置文件 2.3 注入Consul服务 2.3 修改Controller&#xff0c;增加HealthCheck方法 三 运行服务 3.1 docker运行服务 前言 上一篇讲到微服务要灵活伸缩…