Python 中的字符串匹配识别文本中的相似性

1caf22a9450473f36e47f05e6f26cb03.jpeg

更多Python学习内容:ipengtao.com

字符串匹配是自然语言处理(NLP)和文本处理中的一个重要任务,它可以识别文本之间的相似性、找到相同或相似的模式,以及进行文本分类和信息检索等应用。本文将深入探讨Python中的字符串匹配技术,包括基本的字符串比较方法、正则表达式、Levenshtein编辑距离、基于词向量的相似性计算以及模糊字符串匹配。将提供丰富的示例代码,帮助大家更好地理解和应用这些技术。

字符串比较

1 基本字符串比较

Python提供了简单的字符串比较方法,例如使用==运算符来检查两个字符串是否完全相同:

str1 = "Hello, World!"
str2 = "Hello, World!"

if str1 == str2:
    print("字符串相同")
else:
    print("字符串不同")

这将输出"字符串相同",因为str1str2包含相同的文本。

2 字符串相似性比较

如果想比较字符串的相似性而不仅仅是相等性,可以使用模糊字符串匹配方法,例如字符串距离度量(string distance metrics)。其中一种常见的度量是Levenshtein编辑距离。

Levenshtein编辑距离

Levenshtein编辑距离(也称为编辑距离或Levenshtein距离)是一种用于衡量两个字符串之间的相似性的方法。它定义为将一个字符串转换为另一个字符串所需的最少编辑操作次数,包括插入、删除和替换字符。Python中有多种方式来计算Levenshtein编辑距离,一种常见的方式是使用编辑距离库(python-Levenshtein)。

1 安装python-Levenshtein库

可以使用pip安装python-Levenshtein库:

pip install python-Levenshtein

2 使用python-Levenshtein计算编辑距离

以下是如何使用python-Levenshtein库来计算两个字符串之间的编辑距离:

import Levenshtein

str1 = "kitten"
str2 = "sitting"

distance = Levenshtein.distance(str1, str2)
print(f"编辑距离:{distance}")

这将输出编辑距离为3,因为我们需要3个编辑操作(删除字符"k"、插入字符"s"、替换字符"e")将"kitten"转换为"sitting"。

正则表达式

正则表达式是一种强大的字符串匹配工具,它可以通过定义模式来匹配和搜索文本中的字符串。Python中的re模块提供了正则表达式的支持。

1 简单的正则表达式匹配

以下是一个简单的示例,使用正则表达式来查找文本中的手机号码:

import re

text = "我的电话号码是:123-456-7890。请给我打电话。"

pattern = r'\d{3}-\d{3}-\d{4}'  # 匹配电话号码的模式

matches = re.findall(pattern, text)
if matches:
    print("找到的电话号码:", matches)
else:
    print("未找到电话号码。")

这段代码将输出找到的电话号码。

2 正则表达式的高级用法

正则表达式可以执行更复杂的文本模式匹配,包括通配符、分组、字符类等。例如,你可以使用正则表达式来提取电子邮件地址、URL、日期等特定模式的文本。

基于词向量的相似性计算

在自然语言处理中,词向量是一种用于表示文本中单词的数值向量。可以使用词向量来计算文本之间的相似性,例如使用余弦相似度(cosine similarity)。

使用词向量模型

首先,需要选择或训练一个词向量模型,例如Word2Vec、FastText或GloVe。然后,可以使用这些词向量来计算文本之间的相似性。

from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

# 示例词向量
word_vector1 = np.array([0.1, 0.2, 0.3])
word_vector2 = np.array([0.2, 0.4, 0.6])

# 计算余弦相似度
similarity = cosine_similarity([word_vector1], [word_vector2])[0][0]
print(f"余弦相似度:{similarity}")

这将输出两个示例词向量的余弦相似度。

模糊字符串匹配

模糊字符串匹配是一种用于在文本中查找相似或近似匹配的方法。Python中有一些库可以用于模糊字符串匹配,其中一个常用的库是FuzzyWuzzy。

1 安装FuzzyWuzzy库

可以使用pip安装FuzzyWuzzy库:

pip install fuzzywuzzy

2 使用FuzzyWuzzy进行模糊字符串匹配

以下是如何使用FuzzyWuzzy库来找到与目标字符串相似的字符串:

from fuzzywuzzy import fuzz

target_string = "apple"
candidate_strings = ["apples", "banana", "cherry", "aple"]

best_match = max(candidate_strings, key

=lambda x: fuzz.ratio(target_string, x))
print(f"与'{target_string}'最相似的字符串:{best_match}")

这将输出与目标字符串"apple"最相似的字符串。

总结

字符串匹配是文本处理和自然语言处理中的重要任务,可以用于识别文本之间的相似性、查找模式、执行文本分类和信息检索等应用。本文详细介绍了Python中的字符串匹配技术,包括Levenshtein编辑距离、正则表达式、基于词向量的相似性计算以及模糊字符串匹配。通过示例代码,帮助大家更好地理解和应用这些技术,以便在实际项目中处理文本数据时更加灵活和高效。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

更多Python学习内容:ipengtao.com

干货笔记整理

  100个爬虫常见问题.pdf ,太全了!

Python 自动化运维 100个常见问题.pdf

Python Web 开发常见的100个问题.pdf

124个Python案例,完整源代码!

PYTHON 3.10中文版官方文档

耗时三个月整理的《Python之路2.0.pdf》开放下载

最经典的编程教材《Think Python》开源中文版.PDF下载

b1eda46ca4fcc192d0d1036f73aedcd2.png

点击“阅读原文”,获取更多学习内容

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

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

相关文章

D1380/D1381串行计时芯片,2.0V~5.5V 工作电流: 2V时 与TTL 兼容,采用DIP8、SOP8封装

D1380/D1381是一个带秒、分、时、日、日期、月、年的串行时钟保持芯片,每个月多少天以及闰年能自动调节, D1380/D1381低功耗工作方式, D1380/D1381用若干寄存器存储对应信息,一个32.768kHz 的晶振校准时钟,为了使用最小弓|脚,D1380/D1381使用…

【Java】JDBC 数据库连接 (JDK17+MySQL8)

文章目录 JDBC 是什么?导入JDBC jar包一、JDBC的核心API和使用路线二、基于 statement 演示 查询三、基于 statement 查询的改进与问题四、基于 preparedStatement 方式优化五、基于 preparedStatement 演示 CRUDC 、增加数据R、查询数据U、修改/更新 数据D、删除数…

抖音小店2024年创业新趋势,新手找项目,不要再错过这次的机会了

大家好,我是电商花花。 现在的抖音小店完全是电商创业中的一个优秀代名词和最轻便的创业项目,更是以独特的直播达人带货的优势将店铺激发出来。 今天给大家介绍下抖音小店的运作方式,并分析互联网创业的机遇,并提供相关的再做点…

华为交换机配置NQA DNS检测IP网络DNS解析速度

华为HCIA视频教程:超级实用,华为VRP系统文件详解 华为HCIA视频教程:不会传输层协议,HCIA都考不过 华为HCIA视频教程:网络工程师的基本功:网络地址转换NAT 华为HCIP视频教程:DHCP协议原理与配…

IDEA、CLion代码智能提示功能忽略大小写

代码提示和补充功能有一个特性:区分大小写。 如果想不区分大小写的话,就把这个对勾去掉。建议去掉勾选。

acwing BFS

BFS BFS 重点就是要使用 队列 进行每一层的搜索不同题目 队列中保存的元素形式都各不相同,并且也会用到其他辅助结构走迷宫一题,队列中存的是每一层(当前步能走的所有坐标)的坐标,并保存了每一层对应走过的步数八数码一题,队列中…

使用CLIP和LLM构建多模态RAG系统

在本文中我们将探讨使用开源大型语言多模态模型(Large Language Multi-Modal)构建检索增强生成(RAG)系统。本文的重点是在不依赖LangChain或LLlama index的情况下实现这一目标,这样可以避免更多的框架依赖。 什么是RAG 在人工智能领域,检索增强生成(re…

【html+css+js】实例自习笔记–前端基础知识–绝对定位的盒子水平居中

【htmlcssjs】实例自习笔记–前端基础知识–绝对定位的盒子水平居中 【CSS面试题】绝对定位的盒子水平居中 问题&#xff1a; 代码如图 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"view…

Spring上下文之support模块MessageSourceAccessor

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

DNS从入门到精通

DNS从入门到精通 Dns从入门到精通 DNS从入门到精通一、DNS原理二、企业高速缓存dns的搭建三、DNS相关名词解释四、权威DNS搭建编辑子配置文件&#xff08;主要写我们维护的域zone)开始解析 五、权威dns中的数据记录种类及应用编辑子配置文件&#xff08;主要写我们维护的域zone…

【LeetCode: 208. 实现 Trie (前缀树)】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

关于晶振回流焊工艺,你知道哪些呢!

晶振&#xff0c;作为现代电子设备中的核心元件&#xff0c;其制造过程需要经过多道精密的工艺流程。其中&#xff0c;回流焊工艺是晶振制造过程中一个至关重要的环节。本文将详细介绍回流焊工艺在晶振制造中的应用&#xff0c;以及关键的注意事项。 一、回流焊工艺简介 回流…

划重点!多微信号一键定时发圈,省时省力!

发朋圈对于很多职场人来说是一种社交媒体营销和个人品牌建设的重要手段。 然而&#xff0c;一个人面对几个微信号的朋友圈&#xff0c;难免会有应付不过来的时候&#xff0c;这时候只需要一个个微管理管理系统&#xff0c;就能帮你一键定时发圈&#xff0c;省去重复发布的时间…

(2023版)斯坦福CS231n学习笔记:DL与CV教程 (1) | 引言与知识基础

前言 &#x1f4da; 笔记专栏&#xff1a;斯坦福CS231N&#xff1a;面向视觉识别的卷积神经网络&#xff08;23&#xff09;&#x1f517; 课程链接&#xff1a;https://www.bilibili.com/video/BV1xV411R7i5&#x1f4bb; CS231n: 深度学习计算机视觉&#xff08;2017&#xf…

Mybatis 分页插件 PageHelper

今天记录下 Mybatis 分页插件 pageHelper 的使用。 背景 有一个员工表(employee)&#xff0c;现在要使用 pageHelper 插件实现员工的分页查询。 员工表 create table employee (id bigint auto_increment comment 主键primary key,name varchar(32) not …

springboot基于WEB的旅游推荐系统设计与实现

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一 、设计说明 1.1选题动因 当前…

Unity使用Protobuf

1.下载Protobuf ProtoBuf 2.打开它并且编译 如果有报错下载相应的.net版本即可 这里默认是6.0.100 由于我本机是8.0.100所以我改了这个文件 3.编译后的文件复制到Unity Assets/Plugins下 4.写个测试的proto文件 5.然后使用protoc生成 这里实现了一个简单的bat批量生成 Protos C…

postman上传文件文件名有黄色图标

问题&#xff1a; 解决方案 步骤一&#xff1a;设置处打开settings 步骤二&#xff1a;打开location&#xff0c;选择文件所在磁盘目录 步骤三&#xff1a;关闭选项框 文件报错问题解决

cmd输入Python后Python环境无反馈,空

我用cmd输入Python后Python环境无反馈没打开Python环境。 解决方法&#xff1a; 一、打开电脑 [设置] 或 [控制面板] &#xff1b; 二、点到 [系统] 或 [系统和安全] 后&#xff0c;你要看一下找到 [系统信息] 然后点击&#xff1b; 三、 [高级系统设置] 点击后跳出 [系统属…

Pixart PAR2861 蓝牙 keyboard 开发笔记

Pixart PAR2861 是一款采用32 bits ARM Cortex-M0 低功耗、高效能 2.4GHz RF 的 SoC。 该 SoC 整合了高效能的 2.4GHz RF 收发器、硬体Keyscan、硬体按键防弹跳、SPI、I2C、PWM LED、ADC、UART等。内建 DC/DC 转换器和 LDO 为独立 HID 应用提供完整的低功耗 SoC 解决方案。 1.…