精易论坛

标题: 易语言源码 一个模糊匹配算法+打分机制 [打印本页]

作者: 菜就多多练    时间: 2025-5-4 11:10
标题: 易语言源码 一个模糊匹配算法+打分机制
本帖最后由 菜就多多练 于 2025-5-4 11:35 编辑

你来我也来
易语言版  不需要模块
e.e (9.23 KB, 下载次数: 22)




其实是deepseek 用py代码改的https://125.confly.eu.org/thread-14855243-1-1.html  
py 和c++ 可以做的  易语言也可以做!!

  
子程序名返回值类型公开备 注
模糊匹配并评分整数型 返回匹配项数
参数名类 型参考可空数组备 注
候选数量整数型
cha询文本文本型
候选数组文本型
结果数组文本型
变量名类 型静态数组备 注
i整数型 
得分整数型 
临时结果文本型0
计次循环首 (候选数量, i)
得分 = 计算匹配得分_增强版 (预处理文本 (cha询文本), 预处理文本 (候选数组 [i]))
如果 (得分 > 0)
加入成员 (临时结果, 到文本 (i - 1)“|” + 候选数组 [i]“|”到文本 (得分))



计次循环尾 ()
' 按得分降序排序(得分相同时按索引升序)
数组排序 (临时结果, )
结果数组 = 临时结果
返回 (取数组成员数 (临时结果))
子程序名返回值类型公开备 注
计算匹配得分_增强版整数型 
参数名类 型参考可空数组备 注
cha询文本文本型
目标文本文本型
变量名类 型静态数组备 注
得分整数型 
最后匹配位置整数型 
cha询位置整数型 
目标位置整数型 
cha询长度整数型 
目标长度整数型 
前字符文本型 
当前字符文本型 
间隔整数型 
长度系数双精度小数型 
位置系数双精度小数型 
cha询长度 = 取文本长度 (cha询文本)
目标长度 = 取文本长度 (目标文本)
最后匹配位置 = -1
cha询位置 = 1
目标位置 = 1
判断循环首 (cha询位置 ≤ cha询长度 目标位置 ≤ 目标长度)
当前字符 = 取文本中间 (目标文本, 目标位置, 1)
如果 (取文本中间 (cha询文本, cha询位置, 1) = 当前字符)
得分 = 得分 + 10
' 位置奖励
判断 (目标位置 = 1)
如果 (cha询位置 = 1)
得分 = 得分 + 50
得分 = 得分 + 30

判断 (cha询位置 = 1)
得分 = 得分 + 20



' 边界检测(修正点1)
如果 (目标位置 > 1)
前字符 = 取文本中间 (目标文本, 目标位置 - 1, 1)
判断 (取代码 (前字符, ) = 95 取代码 (前字符, ) = 32 取代码 (前字符, ) = 45)  ' _/-符号
得分 = 得分 + 25
判断 (是否小写 (前字符) 是否大写 (当前字符))  ' 驼峰边界
得分 = 得分 + 25




' 连续匹配(修正点2)
如果 (最后匹配位置 ≥ 0)
间隔 = 目标位置 - 最后匹配位置 - 1
如果 (间隔 = 0)
得分 = 得分 + 25
如果 (最后匹配位置 > 1 目标位置 - 最后匹配位置 = 1)
得分 = 得分 + 10



得分 = 得分 - 取惩罚值 (间隔)


最后匹配位置 = 目标位置
cha询位置 = cha询位置 + 1


目标位置 = 目标位置 + 1
判断循环尾 ()
' 最终计算(修正点3)
如果 (cha询位置 > cha询长度)
长度系数 = 0.5 + 0.5 × cha询长度 ÷ 目标长度
位置系数 = 0.7 + 0.3 � (1 - 目标位置 ÷ 目标长度)
返回 (取较大值 (取整 (得分 × 长度系数 × 位置系数), 1))
返回 (0)

子程序名返回值类型公开备 注
预处理文本文本型 
参数名类 型参考可空数组备 注
原始文本文本型
返回 (到大写 (删首尾空 (原始文本)))
子程序名返回值类型公开备 注
是否小写逻辑型 
参数名类 型参考可空数组备 注
字符文本型
返回 (取代码 (字符, ) ≥ 97 取代码 (字符, ) ≤ 122)
子程序名返回值类型公开备 注
是否大写逻辑型 
参数名类 型参考可空数组备 注
字符文本型
返回 (取代码 (字符, ) ≥ 65 取代码 (字符, ) ≤ 90)
子程序名返回值类型公开备 注
取惩罚值整数型 
参数名类 型参考可空数组备 注
间隔整数型
变量名类 型静态数组备 注
原始值双精度小数型 
原始值 = 求次方 (间隔, 1.5)
返回 (取较小值 (取整 (原始值 × 10) ÷ 10, 15))
' 使用示例
子程序名返回值类型公开备 注
测试示例  
变量名类 型静态数组备 注
数据源文本型0
结果文本型0
匹配数整数型 
i整数型 
数据源 = { “MB_YESNO”, “MB_ABORTRETRYIGNORE”, “MESSAGEBOX_YESNO”, “MB_ICONQUESTION” }
匹配数 = 模糊匹配并评分 (取数组成员数 (数据源), “m_no”, 数据源, 结果)
调试输出 (“-----匹配结果-----”)
计次循环首 (匹配数, i)
调试输出 (结果 [i])
计次循环尾 ()
子程序名返回值类型公开备 注
取较大值整数型 
参数名类 型参考可空数组备 注
数值1整数型
数值2整数型
如果 (数值1 ≥ 数值2)
返回 (数值1)
返回 (数值2)

子程序名返回值类型公开备 注
取较小值整数型 
参数名类 型参考可空数组备 注
数值1整数型
数值2整数型
如果 (数值1 ≤ 数值2)
返回 (数值1)
返回 (数值2)

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
测试示例 ()


i支持库列表   支持库注释   
spec特殊功能支持库



字符被屏蔽 建议下载代码


作者: 菜就多多练    时间: 2025-5-4 11:18
@sangco  帮忙分析一下 什么原因  代码我重新上传了
作者: qqmqqg    时间: 2025-5-4 11:18
66666666666666666666
作者: 胖子葛格    时间: 2025-5-4 12:34
感谢大神分享~!
作者: wgqxj    时间: 2025-5-4 13:17
谢谢分享
作者: 一指温柔    时间: 2025-5-4 15:09
谢谢分享
作者: pipicool    时间: 2025-5-4 15:53
学习一下
作者: ttggnn    时间: 2025-5-4 20:54
感谢分享
作者: 豆豆灰常开心    时间: 2025-5-5 07:16
感谢分享,很给力!~
作者: 查过    时间: 2025-5-5 07:20
感谢您对论坛的支持!
作者: 美味萝卜    时间: 2025-5-5 08:32
感谢分享
作者: ctry78985    时间: 2025-5-5 09:31
感谢分享
作者: 神奇的哆啦A梦    时间: 2025-5-5 09:55
感谢大神分享~!
作者: 一指温柔    时间: 2025-5-5 10:38
感谢楼主分享!
作者: benyu168    时间: 2025-5-5 16:43
感谢分享!
作者: 戚雨麟    时间: 2025-5-5 18:42
学习一下
作者: eklove    时间: 2025-5-5 19:09
这算法挺有意思啊,打分机制也蛮灵活的~
作者: 豆豆灰常开心    时间: 2025-5-6 07:11
全都是大佬~
作者: 查过    时间: 2025-5-6 07:16
已经顶贴,感谢您对论坛的支持!
作者: year1970    时间: 2025-5-6 07:52
感谢分享
作者: please    时间: 2025-5-6 09:02
感谢分享,支持开源!!!
作者: please    时间: 2025-5-6 09:36
感谢分享,支持开源!!!
作者: alanwoo    时间: 2025-5-7 00:09
感谢分享,学习一下
作者: 豆豆灰常开心    时间: 2025-5-7 07:20
下个学习一下
作者: 查过    时间: 2025-5-7 07:25
全都是大佬~
作者: please    时间: 2025-5-7 09:37
感谢分享,支持开源!!!




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4