开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 928|回复: 26
打印 上一主题 下一主题
收起左侧

[易源码分享] 易语言源码 一个模糊匹配算法+打分机制

[复制链接]
结帖率:100% (5/5)
跳转到指定楼层
楼主
发表于 6 天前 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   湖南省永州市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 菜就多多练 于 2025-5-4 11:35 编辑

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




其实是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特殊功能支持库



字符被屏蔽 建议下载代码

点评

要不要瞅一瞅. 你的算法好像得分不一样   江苏省扬州市  发表于 6 天前

签到天数: 8 天

26
发表于 3 天前 | 只看该作者   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

结帖率:98% (109/111)

签到天数: 9 天

25
发表于 3 天前 | 只看该作者   山东省青岛市
全都是大佬~
回复 支持 反对

使用道具 举报

结帖率:96% (53/55)

签到天数: 9 天

24
发表于 3 天前 | 只看该作者   山东省青岛市
下个学习一下
回复 支持 反对

使用道具 举报

23
发表于 3 天前 | 只看该作者   辽宁省沈阳市
感谢分享,学习一下
回复 支持 反对

使用道具 举报

签到天数: 8 天

22
发表于 4 天前 | 只看该作者   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

签到天数: 8 天

21
发表于 4 天前 | 只看该作者   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 9 天

20
发表于 4 天前 | 只看该作者   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:98% (109/111)

签到天数: 9 天

19
发表于 4 天前 | 只看该作者   山东省青岛市
已经顶贴,感谢您对论坛的支持!
回复 支持 反对

使用道具 举报

结帖率:96% (53/55)

签到天数: 9 天

18
发表于 4 天前 | 只看该作者   山东省青岛市
全都是大佬~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表