当前位置: 首页 > news >正文

测试中的精准校验:Levenshtein库的应用与实践

在测试过程中,校验测试及结果的准确性是至关重要的。传统的校验方法基本是对字符串做相等、并不相等、包含、不包含等精确的匹配。但在实际应用中,可能返回的结果并不是固定的,或者我们需要校验结果与预计结果的意思相符即可,如下面的几个场景:

  • AIGC生成的语句
  • 搜索引擎的查询词与搜索结果内容的相似度
  • 推荐系统中,推荐内容与用户兴趣的相似度
  • 系统设置的术语库,与实际结果的相似度

在以上场景中,我们无法通过传统的校验方式,对测试结果进行校验,那么就可以使用今天我们介绍的Levenshtein库,利用他提供的字符串相似度计算方法来灵活和高效的校验。

Levenshtein库简介

Levenshtein库是一个专门用于计算字符串之间距离和相似性的Python库。它基于Levenshtein距离(又称编辑距离)算法,该算法通过计算将一个字符串转换为另一个字符串所需的最少单字符编辑操作次数(包括插入、删除和替换)来评估两个字符串之间的差异。

Levenshtein库提供了多种函数,包括计算Levenshtein距离、相似度比率、批量处理字符串对等。这些函数不仅计算准确,而且性能高效,适用于各种规模的字符串处理任务。

Levenshtein库的基本原理

Levenshtein距离算法的核心思想是动态规划。它首先创建一个二维数组,用于存储字符串转换过程中的中间结果。然后,通过填充这个数组,算法逐步计算出将第一个字符串转换为第二个字符串所需的最少编辑操作次数。

具体来说,算法从数组的左上角开始,依次计算每个位置的最小编辑距离。对于每个位置,算法会考虑三种可能的编辑操作:插入、删除和替换。然后,它选择这三种操作中的最小距离,并将其存储在当前位置。最终,数组的右下角元素就是两个字符串之间的Levenshtein距离。

除了计算距离外,Levenshtein库还可以根据距离计算相似度比率。相似度比率是一个介于0和1之间的值,用于表示两个字符串之间的相似程度。值越高,表示两个字符串越相似。

Levenshtein库的使用方法

在使用Levenshtein库之前,我们需要先安装它。可以通过pip命令进行安装:

pip install levenshtein

安装完成后,我们就可以在Python代码中导入并使用Levenshtein库了。以下是一些常用的函数及其使用方法:

distance函数:计算两个字符串之间的Levenshtein距离。

from Levenshtein import distancestr1 = "kitten"
str2 = "sitting"
lev_distance = distance(str1, str2)
print(f"Levenshtein distance between '{str1}' and '{str2}' is {lev_distance}")

ratio函数:计算两个字符串之间的Levenshtein相似度比率。

from Levenshtein import ratiostr1 = "apple"
str2 = "appl"
similarity_ratio = ratio(str1, str2)
print(f"Similarity ratio between '{str1}' and '{str2}' is {similarity_ratio}")

batch函数:批量计算多个字符串对之间的Levenshtein距离。

from Levenshtein import batchpairs = [("apple", "appl"), ("cat", "dog"), ("hello", "world")]
distances = batch(pairs)
for pair, dist in zip(pairs, distances):print(f"Levenshtein distance between '{pair[0]}' and '{pair[1]}' is {dist}")
Levenshtein库在测试中的应用实践

在软件测试中,Levenshtein库可以用于校验测试结果的准确性。以下是一些具体的应用场景:

拼写检查:在自动化测试中,我们可能会遇到由于拼写错误导致的测试结果与预期结果不一致的情况。使用Levenshtein库,我们可以计算测试结果与预期结果之间的Levenshtein距离或相似度比率,从而判断它们是否足够接近,以认为测试通过。

格式校验:在某些情况下,测试结果与预期结果之间的格式可能存在差异(如日期格式、数字格式等)。通过计算字符串之间的相似度比率,我们可以忽略这些格式差异,专注于内容本身的准确性。

模糊匹配:在测试某些具有模糊匹配功能的系统时(如搜索引擎、推荐系统等),我们可以使用Levenshtein库来评估系统的匹配效果。通过计算查询结果与预期结果之间的相似度比率,我们可以判断系统的匹配算法是否准确有效。

异常处理:在测试过程中,有时会遇到一些异常情况(如程序崩溃、数据异常等),导致测试结果无法直接与预期结果进行比较。此时,我们可以使用Levenshtein库来计算异常信息与预期异常信息之间的相似度比率,从而判断异常是否属于预期范围。

案例

以下是一个具体的测试案例,展示了如何使用Levenshtein库来校验测试结果的准确性。

案例背景

我们有一个简单的文本处理系统,它接受一个字符串作为输入,并返回处理后的字符串。系统的目标是删除输入字符串中的所有空格字符。为了验证系统的正确性,我们编写了一个测试用例,并期望系统能够正确地删除空格字符。

测试用例

输入字符串:“hello world”

预期输出字符串:“helloworld”

测试实现

from Levenshtein import ratiodef test_text_processing_system(input_str, expected_output_str, actual_output_str):# 计算实际输出与预期输出之间的相似度比率similarity_ratio = ratio(actual_output_str, expected_output_str)# 判断相似度比率是否满足阈值要求(例如,0.95表示95%的相似度)if similarity_ratio >= 0.95:print("Test passed!")else:print("Test failed!")print(f"Expected output: '{expected_output_str}'")print(f"Actual output: '{actual_output_str}'")# 调用测试函数
input_str = "hello world"
expected_output_str = "helloworld"
actual_output_str = "helloworld"  # 假设这是系统实际返回的结果test_text_processing_system(input_str, expected_output_str, actual_output_str)

在这个案例中,我们使用了Levenshtein库的ratio函数来计算实际输出与预期输出之间的相似度比率。然后,我们根据相似度比率是否满足阈值要求来判断测试是否通过。如果相似度比率大于等于0.95(即95%的相似度),我们认为测试通过;否则,我们认为测试失败,并输出预期输出和实际输出以供调试。

总结

Levenshtein库是一个功能强大且高效的Python库,专门用于计算字符串之间的距离和相似性。它提供了简洁的API设计、高性能的计算速度以及全面的在线文档,使得开发者能够轻松地将其集成到项目中。无论是拼写检查、搜索建议还是数据清洗等场景,Levenshtein库都能提供有力的支持。


http://www.mrgr.cn/news/70168.html

相关文章:

  • FFMPEG录屏(22)--- Linux 下基于X11枚举所有显示屏,并获取大小和截图等信息
  • 基于Java和Vue实现的顺风车拼车系统打车约车平台拼车软件
  • 网络远程操控
  • 地区级的可视化地图不设计,进来看看超炫的样式吧
  • ubuntu18.04上存储空间分析
  • 【神经科学学习笔记】基于分层嵌套谱分割(Nested Spectral Partition)模型分析大脑网络整合与分离的局部指标(二)
  • 第三百一十八节 Java线程教程 - Java线程优先级、Java守护线程
  • 鸿蒙NEXT开发笔记(十三)仿微信聊天App的BASE64转像素图
  • kafka(启动集群,使用spring方法,自定义配置)
  • webpack 性能优化方案 - 代码分离(分包)
  • 部署Apollo 9.0-1 安装docker(阿里源安装)
  • 解读Nature:Larger and more instructable language models become less reliable
  • Android13 默认开启冻结进程
  • 电销智能机器人,怎么使用,操作复杂吗?
  • linux rocky 9.4部署和管理docker harbor私有源
  • ANDROIDWORLD: A Dynamic Benchmarking Environment for Autonomous Agents论文学习
  • Rust实战项目与未来发展——跨平台应用开发项目实践
  • 智慧机房建设整体解决方案
  • 基于h5 移动网赚项目设计与实现springboot+论文源码调试讲解
  • 【Windows】一条命令搞定文件移动与删除!`copy`、`move`、`del`详解
  • 量化研究----网格模型研究,提供源代码
  • Redis 典型应⽤-分布式锁
  • ArcGIS软件之“计算面积几何”地图制作
  • 【SSL-RL】自监督强化学习:随机潜在演员评论家 (SLAC)算法
  • Deepin 系统中安装Rider和Uno Platform
  • 《Django 5 By Example》阅读笔记:p1-p16