Levenshtein,一个超强的 Python 库!

54b86b2e71c456f75878527c8aff8b14.png

更多Python学习内容:ipengtao.com

大家好,今天为大家分享一个超强的 Python 库 - Levenshtein。

Github地址:https://github.com/ztane/python-Levenshtein/


文本相似性在许多领域如自然语言处理、数据清洗和信息检索中都有广泛应用。Python-Levenshtein库提供了一种有效的方法来计算Levenshtein距离,即两个序列之间的编辑距离。本文将全面介绍Python-Levenshtein的安装、特性、基本与高级功能,并结合实际应用场景,展示其在文本处理中的应用。

安装

安装Python-Levenshtein相对简单,可以通过pip命令直接安装:

pip install python-Levenshtein

这条命令将从Python包索引(PyPI)下载并安装Python-Levenshtein及其依赖。

特性

  • 高效计算:利用C语言优化,提供高效的编辑距离计算。

  • 多功能接口:支持计算距离、相似性比率及快速字符串匹配。

  • 易于集成:简单的API易于在Python项目中集成使用。

基本功能

计算Levenshtein距离

Levenshtein距离衡量从一个字符串转换到另一个字符串所需的最小单字符编辑(插入、删除或替换)次数。

import Levenshtein# 计算两个字符串之间的Levenshtein距离
distance = Levenshtein.distance('example', 'samples')
print(f"Levenshtein distance between 'example' and 'samples': {distance}")

这个示例展示了如何使用Levenshtein库计算两个字符串之间的距离。

计算相似度比率

相似度比率是通过比较两个字符串的Levenshtein距离与字符串长度的比例来计算的,可以更直观地表示两个字符串的相似度。

ratio = Levenshtein.ratio('hello', 'hallo')
print(f"Similarity ratio between 'hello' and 'hallo': {ratio:.2f}")

这个函数返回一个介于0和1之间的数,数值越大表示字符串越相似。

快速字符串匹配

该库还提供快速的字符串匹配算法,如Jaro-Winkler距离,这是一种衡量两个字符串相似度的指标,特别适用于短字符串。

jaro_distance = Levenshtein.jaro('dixon', 'dicksonx')
print(f"Jaro distance between 'dixon' and 'dicksonx': {jaro_distance:.2f}")jaro_winkler_distance = Levenshtein.jaro_winkler('dixon', 'dicksonx')
print(f"Jaro-Winkler distance between 'dixon' and 'dicksonx': {jaro_winkler_distance:.2f}")

Jaro-Winkler距离在Jaro距离基础上对前缀相同的字符串给予更高的权重,因此通常更适合于人名的匹配。

高级功能

匹配和搜索最近的字符串

Python-Levenshtein可以用于在一个字符串列表中搜索与目标字符串最相近的项。这对于自动更正和建议系统非常有用。

import Levenshteindef find_closest(target, string_list):closest_match = Noneclosest_distance = float('inf')  # 初始化为无穷大for s in string_list:dist = Levenshtein.distance(target, s)if dist < closest_distance:closest_distance = distclosest_match = sreturn closest_match, closest_distance# 字符串列表和目标字符串
string_list = ['apple', 'pineapple', 'banana', 'orange', 'grape']
target = 'pple'# 查找最接近的字符串
match, distance = find_closest(target, string_list)
print(f"Closest match to '{target}' is '{match}' with a distance of {distance}")

这个函数遍历字符串列表,找到与目标字符串编辑距离最小的字符串。

计算所有配对的相似度

利用Python-Levenshtein计算一个字符串列表中所有可能配对的相似度,可以广泛应用于数据去重和聚类分析。

import Levenshtein
import itertoolsdef calculate_similarities(strings):for s1, s2 in itertools.combinations(strings, 2):sim = Levenshtein.ratio(s1, s2)print(f"Similarity between '{s1}' and '{s2}': {sim:.2f}")# 字符串列表
strings = ['editing', 'edit', 'edition', 'editor']# 计算并输出所有字符串对的相似度
calculate_similarities(strings)

这个例子利用itertools.combinations生成字符串对,然后计算每一对的Levenshtein比率。

实时字符串比较

在一些实时系统中,如即时消息应用或在线协作工具,需要快速地比较用户输入的字符串变化。

import Levenshteinprevious_input = ""
while True:current_input = input("Enter text: ")distance = Levenshtein.distance(previous_input, current_input)print(f"Change distance from last input: {distance}")previous_input = current_input

这个简单的循环演示了如何实时监控和比较用户连续输入的变化。

实际应用场景

自然语言处理(NLP)

在NLP领域,Python-Levenshtein常用于文本相似性分析,如拼写检查、文本校对及机器翻译的质量评估。

实现一个简单的拼写建议工具,当用户输入一个词时,系统会提供拼写最接近的有效词汇建议。

import Levenshtein# 预定义一组正确的单词
dictionary = ['apple', 'banana', 'orange', 'grape', 'watermelon']def suggest_word(input_word):suggestions = sorted(dictionary, key=lambda word: Levenshtein.distance(word, input_word))return suggestions[0:3]  # 返回前三个最接近的单词# 假设用户输入了一个拼写错误的单词
user_input = "aple"
suggestions = suggest_word(user_input)
print("Did you mean:", suggestions)

数据清洗

在数据分析和大数据项目中,去重和清洗数据是一个常见的需求。Python-Levenshtein可用于识别和合并重复或相似的数据条目。

在一个客户数据库中识别并合并重复的客户记录。

import Levenshtein# 假设有一组包含重复的客户名单
customer_names = ['John Smith', 'Jon Smith', 'John Smyth', 'John Smith']def remove_duplicates(names):unique_names = []while names:current_name = names.pop(0)names = [name for name in names if Levenshtein.ratio(name, current_name) < 0.9]unique_names.append(current_name)return unique_namesunique_customer_names = remove_duplicates(customer_names)
print("Unique customer names:", unique_customer_names)

信息安全

在信息安全领域,监测和分析恶意软件、钓鱼攻击中的域名和URL变体是常见的应用场景。

监测钓鱼网站域名,检测与已知品牌域名高度相似的可疑域名。

import Levenshtein# 已知安全的域名列表
safe_domains = ['example.com', 'mybank.com', 'trusted-site.com']# 可疑域名
suspicious_domain = 'mybonk.com'# 检测相似域名
for domain in safe_domains:if Levenshtein.ratio(domain, suspicious_domain) > 0.8:print(f"Warning: {suspicious_domain} is similar to safe domain {domain}")

总结

Python-Levenshtein库是一个高效的工具,用于计算Levenshtein距离,即两个字符串之间通过插入、删除或替换字符所需的最小编辑次数。这个库特别适合于需要快速执行大量字符串比较的应用场景,如自然语言处理、数据清洗和信息安全等领域。通过提供快速的字符串相似度评估,Python-Levenshtein支持开发者在各种情况下实现文本匹配和模式识别,帮助改进文本相关的算法和功能。它的实现基于C语言,确保了处理速度,使其成为处理复杂文本数据时的强大工具。Python-Levenshtein不仅功能强大,而且易于使用,是处理文本数据和开发相关应用的理想选择。

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


如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。

772a0e3e9d6d27768a1ef569f19d526e.gif

我们还为大家准备了Python资料和副业项目合集,感兴趣的小伙伴快来找我领取一起交流学习哦!

ef295920b33289af74f1f26ae4b9364a.jpeg

往期推荐

历时一个月整理的 Python 爬虫学习手册全集PDF(免费开放下载)

Python基础学习常见的100个问题.pdf(附答案)

学习 数据结构与算法,这是我见过最友好的教程!(PDF免费下载)

Python办公自动化完全指南(免费PDF)

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

肝了一周,整理了Python 从0到1学习路线(附思维导图和PDF下载)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信支付商户的“商家转账到零钱”产品快速开通指南

微信支付商户的“商家转账到零钱”功能为商家提供了便捷的转账途径&#xff0c;尤其适用于费用报销、员工福利发放、合作伙伴货款或分销返佣等多种场景。那么&#xff0c;如何快速开通这一功能呢&#xff0c;需要快速开通的商户可以联系小编。 首先&#xff0c;确保你的企业已经…

RK3568平台开发系列讲解(SPI篇)spi_dev 驱动分析

🚀返回专栏总目录 文章目录 一、结构体二、API三、spidev驱动分析3.1、init3.2、probe3.3、spidev_write3.4、spidev_read3.5、spidev_open四、spi_register_driver分析五、spi_dev缺点沉淀、分享、成长

基于SVPWM的飞轮控制系统的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于SVPWM的飞轮控制系统的simulink建模与仿真。SVPWM的核心思想是将逆变器输出的三相电压矢量在两相静止坐标系&#xff08;αβ坐标系&#xff09;中表示&#xff0c;通过控…

MKS 电源 :EDGE 30R40A 400kh 现货 功能正常

MKS 电源 :EDGE 30R40A 400kh 现货 功能正常

完整版解答!2024年数维杯数学建模挑战赛B题

B题 生物质和煤共热解问题的研究 技术文档第一问1.1问题一分析1.2数据预处理1.3问题一Spearman相关性分析 数据代码资料获取 技术文档 第一问 1.1问题一分析 对于问题一&#xff0c;题目要求分析出正己烷不溶物对焦油产率、水产率、焦渣产率这三个指标是否有显著影响&#x…

Django使用

一、根目录下安装 pip install django 二、创建djiango项目 django-admin startproject 项目名称 三、创建app python manage.py startapp app名称 四、启动 python manage.py runserver 五、编写URL与视图关系&#xff0c;相对路径 1、manage.py&#xff08;见资源绑定…

QT状态机4-使用并行状态来避免组合爆炸

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent):

【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手

文章目录 一、前言二、绘制效果三、ConstraintLayout 使用方法3.1 创建布局文件3.2 替换配置3.3 设置约束&#xff0c;步骤13.4 设置约束&#xff0c;步骤23.5 其他设置 四、结束 一、前言 在进行Android APP开发过程中&#xff0c;减少layout嵌套即可改善UI的绘制性能&#x…

HIVE大数据平台SQL优化分享

相信很多小伙伴在面试的时候&#xff0c;必然跳不过去的一个问题就是SQL脚本的优化&#xff0c;这是很多面试官爱问的问题&#xff0c;也是可以证明你实力进阶的一个重要的能力。 下面给大家分享一个重量级的大数据行业sql技能---hive大数据平台SQL优化。 此文章是大数据平台…

能播放SWF文件的FlashPlayer播放器

问题&#xff1a; 你是不是遇到了 flash 动画 放不了了&#xff1f; 以前的flash游戏玩不了了 在网上很难找到好用的&#xff0c;免费Flashplayer播放器&#xff0c; 找到的也没法保存.exe 以前买的课件放不了了 一打开就更新提示&#xff1a; 再不就是意外能打开了但【创建…

SpringBoot解决CORS跨域——@CrossOrigin

前端请求后端报错了。 状态码&#xff1a;403 返回错误&#xff1a;Invalid coRs request 一个注解就搞定了。 在类上加 CrossOrigin

10分钟快速掌握正则表达式

一、背景 因为工作的时候要做一些表单校验和精准搜索。所以写下这篇文章。 当涉及到正则表达式的理解和使用时&#xff0c;尽管它们提供了强大的文本处理能力&#xff0c;但其语法的复杂性常常让人倍感挑战。即使是对经常使用正则表达式的专业开发者来说&#xff0c;也常常会因…