发布时间:2025-05-16
浏览次数:0
我如此偏爱Text,是因为它具备一个很棒的功能,即模糊搜索算法。借助这个功能,我能够快速定位到具体的文件或者函数。在此之前,已有很多人在网上询问过该功能的具体实现方法。然而网上的答案没有一个能让人满意。所以我决定亲自为大家讲解这一功能的具体工作机制以及使用方法。
如果你认为这篇文章的内容太过繁杂,那么下面这段文字或许能够满足你:
如果你不想阅读这些无趣的文字内容,你想直接看到最终的结果,这没关系,我不会责怪你。
互动演示实例:点击这里获取
源代码:C++;
进入正题
Text中的模糊匹配究竟是什么,为何我会认为这个功能很棒,我很高兴大家有这样的疑问。
有两个文件导航功能,它们功能非常强大,程序员使用起来也很顺手,其中一个专门用于搜索文件,另一个专门用于搜索特殊字符以及标记,比如函数和类名等,这两个功能的工作机制实际上是一样的。在这个功能的辅助下,我们无需在搜索框里输入准确的文件名,只需输入几个字符,它就能帮我们搜出想要的文件或函数。输入少量字符后,它会搜索目录下的文件,并对搜索结果进行智能排序。下图展示的便是我们的搜索结果。
我们能够看到,上图呈现的实际是代码文件的搜索结果,我于搜索栏中输入的是“clu”,经过系统智能排序后,显示在最上方的搜索结果是“.cpp”,在搜索结果里,具体匹配到的字符会加粗显示。
下图显示的是另一种形式的搜索结果。
在搜索栏中输入“agn”,之后显示出很多类型,我们只需键入少量关键字符,就能为我们显示出大多数与输入字符相匹配的文件内容。
灵感来源
其模糊匹配功能着实很棒,简直太棒了,我十分喜爱这个功能。遗憾的是,诸多其他类型的文本编辑器、IDE工具以及网站的搜索栏都不具备此功能。该功能极为强大且实用,我觉得所有搜索功能都应引入模糊匹配机制。
但是我想凭借自身努力改变这一现状。首先我要对模糊匹配功能展开深入分析与研究,进而发现其中奥秘。其次我会为大家提供该功能的源代码,其他现有项目能够直接运用这些源代码提升程序搜索性能。
实际上,我已在脑海中设想出几个该功能的特殊使用场景。我希望在编程过程中能使用这个功能。这包括搜索文件名、类名以及函数名等。然而,我想要实现的肯定远不止这些。
我是一名热衷于炉石游戏的玩家,在玩游戏时,寻找卡片是极为常见的任务,许多玩家也会在网上搜索相关内容,类似的网站能为广大玩家提供一定的帮助,另外,我还是卡片数据库的狂热支持者,比如.cards等网站 。
大多数与炉石有关的网站,仅为用户提供基本的子字符串匹配搜索。然而,若卡片名称是“the”,那么该卡片名称里含有子字符串“rag”吗?显然,卡片名称确实包含这个子字符串。但是若卡片名称是“Inner Rage”,“ ”,“Magma Rager”,或者是其他类似形式的字符串呢,其中是否包含子字符串“rag”呢,这一点值得思考,不过很明显,若输入“rtf”或者“ragrs”进行搜索,速度会更快,搜索结果也会更准确。
我个人觉得,在开展模糊匹配的进程中,搜索速度得确保快速,并且在对成千上万条记录开展搜索的进程中,还需要具备一定的交互功能。
功能讲解
要是大家对Text编辑器展开了深入分析,那么有两个地方,肯定会变得极为明显。
Text在进行模糊匹配时,会在搜索结果里尝试与每一个字符做匹配。
其模糊匹配算法中存在一种隐藏的评分机制,该机制会依据具体算法决定哪一个搜索结果更重要,还会按照评分顺序进行显示输出。
我们能够直接借助代码去实现第一个功能,其过程极为简单,具体代码如下所示:
大家能够从上图中看到实现该功能的具体代码,我在自己的代码库中添加了该功能的C++版本sublime text,我这么做有自己的理由,这段代码能替换掉很多简单的子字符串匹配功能。
评分系统
最有意思的地方莫过于这个暗藏的评分机制了。系统会借助什么样的因素给搜索结果评分呢?系统又是依据什么来确定搜索结果的排序呢?首先,我对下面这几个影响因素展开了分析:
-匹配的字符
-不匹配的字符
-连续匹配的字符
-起始字符的位置
-字符后面是否跟有分隔符(如空格和下划线)
-大写字母后面是否跟有小写字母(即驼峰命名法)
这部分内容实际上很容易理解,依据匹配的字符来给搜索结果排序,随后排除不匹配的字符。
但是关键问题在于,系统怎样评判哪一个搜索结果该排在前面 ,我认为在这一点上,不存在唯一正确答案 ,数据权重应由数据集具体情况决定 ,并且文件路径与文件名不同时,文件后缀名常被忽略 ,对于单词,系统通常关注连续字符是否匹配,不会考虑分隔符和驼峰命名法这两个因素 。
大家若想了解它在对不同数据集进行搜索排序时采用的技术细节sublime text,我强烈建议大家去阅读源代码。
-初始评分为0
-检测到匹配字符:+0分
-检测到不匹配的字符:-1分
-检测到连续匹配的字符:+5分
-检测到分隔符:+10分
-检测到驼峰命名法:+10分
-检测到首字母不匹配:-3分(最多减9分)
总结
我极其喜爱Text,也喜欢它的模糊匹配算法。当下我正奋力尝试去开发出一款类似的软件,还要实现类似的功能。我感觉自己很快就要完成了!
其次,我会把自己开发出的源代码提交上去,我期望所有人都能从中受益。我不清楚我的项目有没有漏洞或者设计缺陷,所以对此感兴趣的朋友可以在我的上面留言。
互动演示:请点击这里获取
源代码:C++;
:
感谢大家的阅读!
比特币赞助打赏地址:
请提供具体的句子内容,以便我进行改写。
要闻、干货、原创、专业
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码