首页 > 编程语言 >Levenshtein,一个超强的 Python 库!

Levenshtein,一个超强的 Python 库!

时间:2024-08-22 11:26:12浏览次数:6  
标签:distance Python Levenshtein names 超强 字符串 input

更多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 Levenshtein

def find_closest(target, string_list):
closest_match = None
closest_distance = float('inf') # 初始化为无穷大
for s in string_list:
dist = Levenshtein.distance(target, s)
if dist < closest_distance:
closest_distance = dist
closest_match = s
return 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 itertools

def 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 Levenshtein

previous_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_names

unique_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不仅功能强大,而且易于使用,是处理文本数据和开发相关应用的理想选择。

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


————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/wuShiJingZuo/article/details/138885163

标签:distance,Python,Levenshtein,names,超强,字符串,input
From: https://www.cnblogs.com/ExMan/p/18373490

相关文章

  • 身份证识别、护照OCR、python身份证四要素实名认证API
    翔云身份证实名认证与身份证识别接口让你的APP在众多竞品中脱颖而出,仅需一键上传,用户身份信息便能快速提取,精准核验,告别繁琐的手动输入与反复核验,简化身份验证流程,提升用户体验,现已被广泛应用于电商、在线教育、金融等各类生活服务类APP中。python身份证实名认证接口代码......
  • Python之可变对象及其引用、深拷贝和浅拷贝
    可变对象及其引用深拷贝和浅拷贝可变对象及其引用Python中,变量名关联有值时才存在,如x=5变量名没有关联到特定的类型,类型有关联的对象觉得变量创建后即与特定的Python对象相关联Python维护命名空间,其中改变名与变量关联。这种联系,称为“引用”,也就是变量名引用对象......
  • Python之列表解决实际问题案例(字谜、文件分析)
    字谜文件分析1.《葛底斯堡演说》的长度2、有多少个不同的单词字谜字谜通过重新安排单词里的字母,来组成新的单词或词组。例如,将cinema转换成另一个英语单词iceman。在这个例子中,将设计一个程序,检查两个词是否构成字谜。如何做到这一点?做法是找出两个字谜单词所共享......
  • Python之列表的常用方法(添加删除排序等)
    一、列表的可变性二、列表方法1、不修改列表的方法2、修改列表的方法(1)添加(2)删除(3)列表排序(4)颠倒列表三、练习四、range、split和多重赋值五、使用join在列表和字符串之间转换一、列表的可变性在字符串中,不能直接去替换字符串中指定索引的值,需要使用切片和连接符。......
  • Python开发中,SQLAlchemy 的同步操作和异步操作封装,以及常规CRUD的处理。
    在我们使用Python来和数据库打交道中,SQLAlchemy是一个非常不错的ORM工具,通过它我们可以很好的实现多种数据库的统一模型接入,而且它提供了非常多的特性,通过结合不同的数据库驱动,我们可以实现同步或者异步的处理封装。1、SQLAlchemy介绍SQLAlchemy 是一个功能强大且灵活的Python......
  • Python中的常用的数据预处理所需工具
    Jupyter对于数据预处理的重要功能是支持用逐行编写和运行代码,实时查看结果。Jupyter是一个开源的交互式计算环境,它允许用户以网页的形式编写和运行代码,以及创建和共享文档,这些文档可以包含实时代码、方程、可视化和解释性文本。Jupyter的主要组件包括:1.JupyterNotebook:一......
  • 【Python脚本】刚度矩阵格式转换
    对于1-2-3坐标系:应力矩阵如下:\[\left.[\sigma]=\left[\begin{array}{ccc}\sigma_{11}&\sigma_{12}&\sigma_{13}\\\sigma_{12}&\sigma_{22}&\sigma_{23}\\\sigma_{13}&\sigma_{23}&\sigma_{33}\end{array}\right.\right]\]张量应变矩阵如下:......
  • python开发环境安装-包含Anaconda的安装配置和pycharm的安装
    一、需要得安装包1、 Anaconda3-5.3.0-Windows-x86_64.exe python环境2、pycharm-professional-2021.2.2.exe     开发工具3、ide-eval-resetter-2.1.13.zip            破解工具二、Anaconda安装Anaconda,中文大蟒蛇,是一个开源的Python发行版本。1......
  • 学Python必不可少的语言开发,程序员赶紧收藏!
      Python是一种广泛使用的高级编程语言,以其简洁易读的语法和强大的库支持而闻名。它支持多种编程范式,包括面向对象、命令式和函数式编程。Python的应用领域非常广泛,包括网络编程、数据分析、人工智能、机器学习、Web开发、自动化运维等。开发环境搭建安装Python:......
  • python configparser操作配置文件
    一、configparser概述configparser是Pyhton标准库中用来解析配置文件的模块;Python2.x中名为ConfigParser,3.x已改名为configParser二、配置文件的格式常见的配置文件后缀:.ini,.conf等,主要结构为包括以下的文本信息:sections(段)keys(properties\键)values(值)格式如下......