搜索框打错 2 个字还能搜到?Levenshtein 编辑距离实测

发布时间:2026/11/2 5:05:05

搜索框打错 2 个字还能搜到?Levenshtein 编辑距离实测 把 javascirpt 敲进这个页面的搜索框排在第一的仍然是 JavaScript相似度 80.0%、编辑距离 2。切成 Damerau-Levenshtein 再算一遍同一条结果的编辑距离变成 1相似度 90.0%。同一份词库、同一个错词两套算法给出两个答案这个差别就是搜索框能不能容错的全部内容。在线案例与源码https://atomgit.com/deli007/demo_park/tree/main/codearts-fuzzy-search-lab一、为什么值得看打错字凭什么还能搜到搜索框容错这件事多数人只见过结果没见过过程。我把它做成一个单页网页内置 116 个开发者常用词输入任意查询词实时看到每个词的编辑距离、相似度和排名。页面还把 Levenshtein 的动态规划矩阵画成热力图每一步数值从哪来鼠标放上去就能看出来。二、先给结论8 组错词的实测距离下表是我在页面上逐条跑出来的左边是敲进去的错词右边是它命中的词。查询词命中词Levenshtein 距离Damerau 距离相似度javascirptJavaScript2180.0%kubernetseKubernetes2180.0%rediseRedis1183.3%dockrDocker1183.3%pyhtonPython2166.7%动态归划动态规划1175.0%二分查早二分查找1175.0%哈希表哈希表00100.0%8 组里有 3 组的两个距离对不上差别全在「相邻两个字符打反了」这一种错法上。Levenshtein 把换位算成两次替换Damerau-Levenshtein 算成一次。拼音首字母匹配是第三条路线它把汉字压成声母串再比距离。三、准备环境进入码道 Web浏览器打开码道 Web 版https://devcloud.cn-north-4.huaweicloud.com/chat?sourcedmzntgwsfsourceaddmzntgwwbwz登录后直接在对话窗口输入需求不用装软件。码道有三种使用方式WebUI 浏览器对话、TUI 终端命令行和桌面 IDE 插件。本文用 WebUI 版演示。四、需求原文把要验的东西先写死给码道的需求里关键的几条是这些。输入任意查询词实时对词库做模糊匹配按相似度从高到低排序每条给出分数和编辑距离。三种算法可切换也可同屏对比Levenshtein、Damerau-Levenshtein、拼音首字母匹配。把 Levenshtein 的动态规划矩阵画出来热力色显示每个格子的值悬停时高亮三个来源方向。每种算法显示本次查询耗时同一个查询连跑 3 次取平均。内置 8 组固定测试用例点一下跑断言逐条显示通过或不通过。空输入、纯空格、超过 32 个字符都要给中文提示并且不崩。第 5 条是有意写死的页面上有能点开的断言文章里的测试数字才有出处。五、页面上有哪几块顶部是查询框和词库容量下面一排四个页签。结果区一行一个词右边是百分数和编辑距离左边一条进度条表示相似度。再往下是动态规划矩阵热力图、三种算法的耗时条最后是自检面板。六、代码亮点一次换位两种答案Damerau-Levenshtein 比 Levenshtein 只多一行判断。当下一个字符和当前字符刚好互换位置时距离可以直接从两格之前的值加 1 得到。拼音首字母匹配走另一条路页面内置一张声母对照表先把汉字压成字母串再算距离。查询 dthg 时动态规划的声母串是 dtgh差一次换位拿到的相似度是 50.0%。相似度公式是 1 减去距离除以两个词的最大长度所以距离 2、长度 10 就是 80.0%。七、验证与踩坑第一步是页面自检 8/8 通过页面上 8 条断言逐条列了出来。第二步我拿 Python 把 8 组错词重算了一遍。用独立实现的 Levenshtein 和 Damerau 算距离再按同一个公式算相似度。8 组的距离和相似度与页面逐条一致没有一处对不上。第三步是三处真实边界我留着没改。第一处是矩阵和列表对不上。矩阵面板固定按 Levenshtein 画切到 Damerau 页签后列表说距离 1矩阵说明还写着距离 2。第二处是排序加成会压过正确答案。查 dthg 时Deno 的首字符同为 d白拿 0.3 分加成把只差一次换位的动态规划挤到了后面。第三处是结果列表永远给 Top 12。查三个问号这种全标点输入页面照样返回 Kubernetes标着 0.0%、距离 10既不报错也不说没找到。超长输入时矩阵区和耗时区都会清空自检面板却还留着上一次的结果这是第五张图里能看到的不彻底的一处。八、本地复现与亲手点三下页面是单文件把 index.html 下载下来双击就能打开没有依赖也没有后端。想用本地服务的方式打开在文件所在目录跑一行命令。python-mhttp.server8080# 浏览器打开 http://127.0.0.1:8080/index.html亲手点三下顺序建议这样。看关键数值输入 javascirpt第一条应该是 JavaScript、80.0%、距离 2。换算法点 Damerau-Levenshtein 页签同一条变成 90.0%、距离 1。看失败路径粘 33 个字符进去应该看到红色提示矩阵与耗时一起清空。九、用码道的体会这一轮里需求写清楚比写得漂亮重要。「内置 8 组固定测试用例点一下跑断言」这一句换来了交付时可以直接点开的 8 条断言。「三种算法可切换也可同屏对比」这一句让我第一轮就撞见了矩阵和列表数字不一致的问题。另一条体会是边界要自己主动喂进去。全标点输入、超长输入、声母换位这三处都是交付之后我自己试出来的。不主动喂极端输入页面看上去是完美的。十、直接下载试玩Demo Park 仓库https://atomgit.com/deli007/demo_park本案例目录https://atomgit.com/deli007/demo_park/tree/main/codearts-fuzzy-search-lab十一、下一步一个明显的改进是让矩阵跟着当前算法走Damerau 页签下把换位那一格也画出来。再往后可以给结果列表加一条相似度下限低于阈值就直接说没找到而不是硬给 Top 12。
延伸阅读

更多相关文章

2026/11/2 5:05:05

Vins-Fusion相机-IMU在线标定技术解析与应用

1. Vins-Fusion相机-IMU在线标定技术解析在视觉惯性导航系统(VINS)中,相机与IMU的标定质量直接决定了系统定位精度。传统离线标定方法依赖特定场景和人工干预,而Vins-Fusion实现的在线标定技术,能够在系统运行时自动优化传感器间的时空关系。…

2026/11/2 5:00:05

Cloudflare Pages 静态站点托管与 Git 驱动部署全链路解析

做前端这十几年,部署这件事的变化挺有意思。早些年接一个企业官网,流程是买台主机、开 FTP、把打包好的 dist 拖上去,改一次文案就得从头再来一遍;后来容器化流行,又开始写 Dockerfile、配 Nginx、盯着证书到期日。直到…

2026/11/2 7:25:15

6S大气校正手册精读:辐射传输模型原理与工程实践指南

简介:这份PDF文档是6S模型(第二代太阳光谱卫星信号模拟)的用户操作说明,面向从事定量遥感、大气校正研究的科研人员与工程技术人员,帮助其理解大气传输过程中吸收与散射效应对卫星观测信号的影响。文档系统阐述了大气吸…

2026/11/2 7:25:15

SSH客户端安装配置全攻略:从下载甄别到安全使用

SSH 客户端这东西,但凡摸过几天服务器的人都不陌生。早些年大家伙儿手里攥着的工具五花八门,有人用命令行原生的 ssh,有人用带图形界面的终端模拟器,还有一批人专门找那种"一站式"的 Windows 桌面客户端,图的…

2026/11/2 7:25:15

6S大气传输模型:从吸收散射到遥感校正的工程实践

简介:这份PDF文档是6S大气辐射传输模型的官方用户指南(Version 2),面向从事定量遥感、大气校正与卫星数据处理的科研人员和工程师,用于理解并模拟太阳—地表—传感器路径上的大气影响。文档系统讲解大气吸收与散射效应…

2026/11/2 7:25:15

使用NVIDIA Isaac Sim 4.5进行四足机器人强化学习训练

1. 项目概述四足机器人强化学习训练是当前机器人领域的热门研究方向,而NVIDIA Isaac Sim 4.5作为强大的机器人仿真平台,为这一研究提供了理想的开发环境。本教程将详细讲解如何利用Isaac Sim 4.5完成四足机器人从零开始的强化学习训练全流程。在实际机器…

2026/11/2 7:25:15

Prometheus在Ubuntu 22.04上的部署与优化实践

1. 运维监控系统选型与Prometheus核心优势在当今复杂的IT基础设施环境中,监控系统已经成为运维工作的神经中枢。作为一名有十年运维经验的工程师,我见证过从Nagios到Zabbix再到Prometheus的技术演进历程。为什么Prometheus能在短短几年内成为云原生时代的…

2026/11/2 7:20:15

金融科技测试实战:区块链监管系统测试框架构建

1. 项目背景与核心挑战作为一名在金融科技领域深耕多年的软件测试工程师,我最近参与了一个极具挑战性的项目——为虚拟经济监管系统构建数字化测试框架。这个项目让我深刻体会到,在区块链和数字资产快速发展的今天,传统的测试方法已经无法满足…

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑