用户:qingzo

共发布: 154
python 文本字符串模糊匹配算法+打分机制代码分享

python 文本字符串模糊匹配算法+打分机制代码分享

095745bnbibnjcilvujbjw.png

import math
from typing import Callable, List, Tuple
 
 
def fuzzy_match_and_score(
        count: int,
        query: str,
        pred: Callable[[int], str]
) -> List[Tuple[int, int]]:
    """模糊匹配并评分
 
    :param count: 候选字符串数量
    :param query: cha询字符串
    :param pred: 获取候选字符串的函数,接受索引返回字符串
    :return: 按得分降序排列的(索引, 得分)列表
    """
 
    def fuzzy_match_score(q: str, t: str) -> int:
        """基于原始C++算法的模糊匹配评分"""
        score = 0
        last_match = -1
        qi = ti = 0
        q_len, t_len = len(q), len(t)
        q = q.lower()
        t = t.lower()
 
        while qi < q_len and ti < t_len:
            if q[qi] == t[ti]:
                score += 10  # 基础匹配分
 
                # 位置相关奖励
                if ti == 0:
                    if qi == 0:
                        score += 50  # 双首字母匹配
                    else:
                        score += 30  # 目标首字母匹配
                elif qi == 0:
                    score += 20  # cha询首字母出现在目标中
 
                # 单词边界检测
                if ti > 0 and (
                        t[ti - 1] in ('_', ' ', '-') or
                        (t[ti - 1].islower() and t[ti].isupper())
                ):
                    score += 25  # 边界匹配奖励
 
                # 连续匹配检测
                if last_match >= 0:
                    gap = ti - last_match - 1
                    if gap == 0:
                        score += 25  # 连续匹配奖励
                        if last_match > 0 and ti - last_match == 1:
                            score += 10
                    else:
                        penalty = min(int(math.pow(gap, 1.5)), 15)
                        score -= penalty  # 跳跃惩罚
 
                last_match = ti
                qi += 1
            ti += 1
 
        if qi == q_len:
            # 长度匹配系数 (0.5-1.0)
            length_ratio = q_len / t_len
            score = int(score * (0.5 + 0.5 * length_ratio))
 
            # 位置系数 (0.7-1.0)
            position_ratio = 1.0 - (ti / t_len)
            score = int(score * (0.7 + 0.3 * position_ratio))
 
            return max(score, 1)
        return 0
 
    results = []
    for i in range(count):
        target = pred(i)
        if score := fuzzy_match_score(query, target):
            results.append((i, score))
 
    # 按得分降序,同分按索引升序
    results.sort(key=lambda x: (-x[1], x[0]))
    return results
 
 
#使用示例
# 候选数据源
candidates = [
    "MB_YESNO",
    "MB_ICONQUESTION",
    "MB_ABORTRETRYIGNORE",
    "IDOK",
    "IDCANCEL",
    "MESSAGEBOX_YESNO"
]
 
# cha询字符串
query = "m_no"
 
# 执行模糊匹配
results = fuzzy_match_and_score(
    count=len(candidates),
    query=query,
    pred=lambda i: candidates<i>
)
print(f"总共匹配到 {len(results)} 项:")
for index, score in results:
    print(f"\t{candidates[index]}(得分: {score})")
# print(results)
#长度匹配因素 = cha询文本长度 / 目标文本长度
#匹配位置因素 = 1.0 - (目标文本cha询位置 / 目标文本长度)
#计算公式: (总分 (0.5 + 0.5 长度匹配因素)) (0.7 + 0.3 匹配位置因素)
#总分: 10+50+10-1+10-5+10+25+10=119
#长度匹配因素: 4 / 8 = 0.5
#匹配位置因素: 1.0 - (8 / 8) = 0.0
#最终得分:套入长度/位置因素, 总得分62
#1        m        0        基础+10, 双首字母匹配+50
#2        _        2        基础+10, 跳跃1个字符惩罚-1
#3        n        6        基础+10, 跳跃3个字符惩罚-5
#4        o        7        基础+10, 连续匹配+25, 二次连续+10
# 输出:[(0, 75), (1, 61), (3, 44), (4, 1)]</i>

uniapp中uview的多行输入框 textarea 右下角完成改为换行方法

uniapp中uview的多行输入框 textarea 右下角完成改为换行方法

<u--textarea confirm-type="return" :maxlength="-1" v-model="data.remark" placeholder="请填写任务需求"></u--textarea>


知名机场速蛙云疑似跑路(已多日无法打开基本确定)

知名机场速蛙云疑似跑路(已多日无法打开基本确定)


第一次测试时间2022年7月30日22点。


目前速蛙云订阅节点失效,官网已无法访问,疑似已跑路。


当前时间:2022年7月31日21点。


依旧无法打开,节点全挂。


本站所有关于“速蛙云”的文章不要再点击查看了。

机场是为了方便使用AdSense、追剧、学术查询、社交等用途,请正确使用!

WordPress免费瀑布流博客主题 Gridzone下拉瀑布流主题

WordPress免费瀑布流博客主题 Gridzone下拉瀑布流主题

Gridzone 是一个WordPress免费博客主题,采用瀑布流布局,可以很好的展示各种作品。整体非常大气,全面支持古腾堡区块编辑器,而且非常灵活。

20191014083411_wpdaxue_com.jpg

WordPress 免费杂志博客主题 Instorm自媒体传媒模板

WordPress 免费杂志博客主题 Instorm自媒体传媒模板

Instorm 是一个完美的杂志和博客主题,具有丰富多彩的渐变风格。通过将其设置为您想要的任何颜色来赋予它您自己的风格。

wordpress-theme-instorm.jpg

开发WordPress时怎么用短代码中过滤掉br标签呢

开发WordPress时怎么用短代码中过滤掉br标签呢

WordPress 短代码中过滤掉br标签

function add_style( $atts, $content = null ) {
    $pure_content = str_replace("<br />","",$content);
    return '<style>' . $pure_content . '</style>';
}
add_shortcode( 'style', 'add_style' );

360驱动大师 v2.0.0.1800 精简单文件版绿色版本

360驱动大师 v2.0.0.1800 精简单文件版绿色版本

360驱动大师官(360驱动)是一款专业解决驱动安装更新软件,百万级的驱动库支持,驱动安装一键化,无需手动操作,首创的驱动体检技术,让你更直观了解您电脑的状态,强大的云安全中心让保证您所下载的驱动不带病毒,快一点,再快一点,体验一键化安装和升级的乐趣,驱动大师陪你一路行。


 360驱动大师官方版功能:


1、通用网卡驱动

在没有网卡驱动的情况下自动从本地安装网卡驱动,方便新装机用户


雷电模拟器9 v9.0.8 纯净版无广告优化版本(适合游戏多开)

雷电模拟器9 v9.0.8 纯净版无广告优化版本(适合游戏多开)

雷电模拟器9是基于安卓9内核开发的全新版本模拟器,具备强大的游戏兼容性和系统兼容性,能够稳定运行市面上万款热门手游,带你感受更快的速度、更完美的操控体验!“雷电模拟器 9”全面升级了Android 9 作业系统,将32位和64位元框架合并,有着比以往更快的启动速度,更低的电脑资源占用。还具备一系列如操作录制、免费远程操控等独特功能,让用户在电脑玩手游拥有更畅快的体验。


软件还内置了强大的无界趣连,能够打破空间的限制,远程操作电脑进行体验。

zblog文章段落关键词插件 文章段落最后追加一个关键词

zblog文章段落关键词插件 文章段落最后追加一个关键词

段落关键词插件简介

文章段落增加关键词,插件可以在文章段落最后追加一个关键词,关键词可以是自定义的、可以是文章热门tag、可以是文章标题和站点名称


手动设置段落后缀的文章不会再自动添加后缀。没有手动设置的文章,系统会自动添加段落后缀。


插件设置页面

202207051657030151264686.webp

zblog博客系统友情链接模块管理及导航管理插件

zblog博客系统友情链接模块管理及导航管理插件

表单化管理导航、友情链接等。


2022-07-20:JS 提示错误;

2021-02-05:搜索优化;

2021-02-03:增加分类和页面链接搜索;

2020-12-18:切换主题自动重建内容;

2020-07-27:二级ico修复;

2020-06-16:可以在"文本"一项内写入img等html标签;

2020-06-16:增加一个批量替换域名的函数,控制台执行 fnReplaceHost("旧内容","新内容");

zblog文章自动别名生成插件(支持汉字转拼音、首字母、时间戳、年月日秒)

zblog文章自动别名生成插件(支持汉字转拼音、首字母、时间戳、年月日秒)

根据文章标题自动生成拼音、首字母、时间戳、年月日秒别名


更新日志:

2022-07-21

临时增加过滤字符


2022-06-11

提交忘记提交的更新


2022-05-11

修复自查出来的批处理错误,其他问题请群里面@我


2022-04-25

增加重复判断和开关,可以设置重复才加随机啦

WordPress中文文件管理插件 Filester-File Manager Pro 汉化中文语言包

WordPress中文文件管理插件 Filester-File Manager Pro 汉化中文语言包

这篇再介绍一款功能类似的插件Filester-File Manager Pro,所有功能都是免费的,同样支持在 WordPress 后台编辑、删除、上传、下载、压缩、复制和粘贴文件和文件夹等操作,并且编辑文件时,支持代码高亮显示。


‹‹ 1  2  3 4 5 6 7 8 9 10 ››