|
模糊匹配并评分 | 整数型 | |
|
候选数量 | 整数型 | | | |
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
)


判断 (取代码 (前字符,
) = 95
或 取代码 (前字符,
) = 32
或 取代码 (前字符,
) = 45
) 



得分 = 得分 + 25



判断 (是否小写 (前字符
) 且 是否大写 (当前字符
))




得分 = 得分 + 25




















如果 (最后匹配位置 ≥ 0
)


间隔 = 目标位置 - 最后匹配位置 - 1



如果 (间隔 = 0
)



得分 = 得分 + 25




如果 (最后匹配位置 > 1
且 目标位置 - 最后匹配位置 = 1
)




得分 = 得分 + 10



















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










最后匹配位置 = 目标位置


cha询位置 = cha询位置 + 1




目标位置 = 目标位置 + 1
判断循环尾 ()
如果 (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
)
测试示例 ()