|
发表于 2022-5-30 15:55:23
|
显示全部楼层
江苏省苏州市
.版本 2 .程序集 识别 .程序集变量 a, 类_位图操作 .程序集变量 v, 类_位图处理 .程序集变量 b, 点阵, , "0" .子程序 识别初始化 .如果真 (文件是否存在 (取运行目录 () + “\特征库.edb”)) 打开 (取运行目录 () + “\特征库.edb”, , , , , , ) 返回 () .如果真结束 信息框 (“打开特征数据库失败!”, #信息图标, ) .子程序 识别, 文本型 .参数 图, 字节集 .参数 调试, 逻辑型, 可空 .局部变量 i, 整数型 .局部变量 色, 整数型 .局部变量 临时, 点阵 .局部变量 c, 整数型 .局部变量 句柄, 整数型 .局部变量 位图, 字节集 .局部变量 颜色表, 整数型, , "0" .局部变量 k, 点阵 .局部变量 字节集, 字节集 字节集 = 图 .如果真 (字节集 = { }) 返回 (“不识别”) .如果真结束 ' 字节集 = 快照 (编辑框1.取窗口句柄 (), 编辑框1.宽度, 编辑框1.高度) ' 画板1.清除 (, , , ) 位图 = 字节集 k.x = 图片_取宽度 (位图) k.y = 图片_取高度 (位图) 清除数组 (b) .计次循环首 (k.x, i) .计次循环首 (k.y, c) .如果真 (v.取位图颜色 (位图, i, c) = #黑色) 临时.x = i 临时.y = c 加入成员 (b, 临时) .如果真结束 .计次循环尾 () .计次循环尾 () 返回 (处理字特征码 (调试)) .子程序 处理字特征码, 文本型 .参数 调试, 逻辑型, 可空 .局部变量 i, 整数型 .局部变量 x0, 整数型 .局部变量 y0, 整数型 .局部变量 cmd_Y, 文本型 .局部变量 cmd_X, 文本型 .局部变量 特征码, 文本型 .局部变量 o, 整数型 .局部变量 m, 整数型 .局部变量 特定, 整数型 .局部变量 特定_值, 整数型 .局部变量 分割, 文本型, , "0" .局部变量 分割2, 文本型, , "0" .局部变量 op, 整数型 .局部变量 临时, 文本型, , "0" .局部变量 op1, 整数型 .局部变量 临时2, 文本型, , "0" .局部变量 op2, 整数型 .局部变量 ed, 整数型 .局部变量 特征_集, 文本型, , "0" .局部变量 ed1, 整数型 .局部变量 字, 文本型 .局部变量 识别结果, 文本型 .局部变量 数据_临时, 文本型 .局部变量 数据_临时2, 文本型 .局部变量 数据_1, 文本型, , "0" .局部变量 数据_2, 文本型, , "0" .局部变量 q, 整数型 .局部变量 相似度, 双精度小数型 x0 = 200 y0 = 200 .计次循环首 (取数组成员数 (b), i) .如果真 (b [i].x < x0) x0 = b [i].x .如果真结束 .如果真 (b [i].y < y0) y0 = b [i].y .如果真结束 .计次循环尾 () .计次循环首 (取数组成员数 (b), i) b [i].x = b [i].x - x0 cmd_X = cmd_X + 到文本 (b [i].x) + “,” b [i].y = b [i].y - y0 cmd_Y = cmd_Y + 到文本 (b [i].y) + “,” .计次循环尾 () ' 输出调试文本 (“>>>多字处理...”) .' 计次循环首 (取数组成员数 (b), i) ' 画板1.画点 (b [i].x, b [i].y, #蓝色) .' 计次循环尾 () ' _多字处理过程 (cmd_Y, cmd_X) ' 多字处理 研究了几个小时 始终弄不好QvQ 分割 = 分割文本 (cmd_X, “|”, ) 分割2 = 分割文本 (cmd_Y, “|”, ) .判断开始 (取数组成员数 (分割) ≥ 2) .计次循环首 (取数组成员数 (分割), i) 特征码 = “” .计次循环首 (15, o) 特征码 = 特征码 + 到文本 (文本_取出现次数 (分割2 [i], 到文本 (o - 1))) 特征码 = 特征码 + 到文本 (文本_取出现次数 (分割 [i], 到文本 (o - 1))) .计次循环尾 () 加入成员 (特征_集, 特征码) .计次循环尾 () .默认 .计次循环首 (15, o) 特征码 = 特征码 + 到文本 (文本_取出现次数 (cmd_Y, 到文本 (o - 1))) 特征码 = 特征码 + 到文本 (文本_取出现次数 (cmd_X, 到文本 (o - 1))) .计次循环尾 () 加入成员 (特征_集, 特征码) .判断结束 ' 输出调试文本 (cmd_X, cmd_Y) .计次循环首 (取数组成员数 (特征_集), ed1) ' 输出调试文本 (特征_集 [ed1] + “ 特征码”) 到首记录 () .如果 (查找 (读 (1) = 特征_集 [ed1])) 字 = 读 (2) 识别结果 = 识别结果 + 字 ' 编辑框1.内容 = 字 .否则 识别结果 = 识别结果 + “不识别” .如果结束 .计次循环首 (取记录数 (), q) 相似度 = 取文本相似度 (读 (1), 特征_集 [ed1]) .如果 (相似度 > 0.6) 字 = 读 (2) .如果 (调试 = 真) 识别结果 = 字 + 到文本 (相似度) .否则 识别结果 = 字 .如果结束 ' 编辑框1.内容 = 字 ' _启动窗口.标题 = “相似度:” + 到文本 (相似度) 跳出循环 () .否则 ' 识别结果 = .如果 (调试 = 真) 识别结果 = “不识别” + 到文本 (相似度) .否则 识别结果 = “不识别” .如果结束 .如果结束 跳过 () .计次循环尾 () .计次循环尾 () 返回 (识别结果) ' 编辑框2.加入文本 (“识别结果:” + 识别结果 + #换行符) .子程序 _多字处理过程 .参数 cmd_Y, 文本型, 参考 .参数 cmd_X, 文本型, 参考 .局部变量 第一次出现, 整数型 .局部变量 缓存_X, 文本型 .局部变量 缓存_Y, 文本型 .局部变量 临时_X, 文本型 .局部变量 临时_Y, 文本型 .局部变量 x, 文本型, , "0" .局部变量 y, 文本型, , "0" .局部变量 x0, 整数型 .局部变量 y0, 整数型 .局部变量 i, 整数型 .局部变量 完毕, 逻辑型 临时_X = cmd_X 临时_Y = cmd_Y 输出调试文本 (临时_X) cmd_Y = 缓存_Y cmd_X = 缓存_X 输出调试文本 (cmd_Y, cmd_X, “>>>>>多字处理完成”) .子程序 GetCharList, , , 相似度 .参数 srcStr, 文本型 .参数 charList, 短整数型, 参考 数组 .局部变量 q, 短整数型 .局部变量 t, 字节集 .局部变量 i .如果真 (取文本长度 (srcStr) = 0) 返回 () .如果真结束 i = 1 t = 到字节集 (srcStr) .循环判断首 () .如果 (t [i] > 126) q = 合并短整数 (t [i], t [i + 1]) 加入成员 (charList, q) i = i + 2 .否则 q = t [i] 加入成员 (charList, q) i = i + 1 .如果结束 .循环判断尾 (i ≤ 取文本长度 (srcStr)) .子程序 max, 整数型, , 相似度 .参数 c .参数 d 返回 (选择 (c > d, c, d)) .子程序 取文本相似度, 双精度小数型, , 相似度 .参数 文本, 文本型 .参数 文本1, 文本型 .局部变量 x, 短整数型, , "0" .局部变量 y, 短整数型, , "0" .局部变量 n .局部变量 m GetCharList (文本, x) GetCharList (文本1, y) n = 取数组成员数 (x) m = 取数组成员数 (y) .如果真 (n + m ≤ 0) 返回 (0) .如果真结束 返回 (四舍五入 (GetMaxLenSubStr (x, y) ÷ max (n, m), 4)) .子程序 GetMaxLenSubStr, 整数型, , 相似度 .参数 x, 短整数型, 数组 .参数 y, 短整数型, 数组 .局部变量 n .局部变量 m .局部变量 i .局部变量 j .局部变量 dp, , , "0" n = 取数组成员数 (x) m = 取数组成员数 (y) 重定义数组 (dp, 假, max (n, m) + 1, max (n, m) + 1) .计次循环首 (n, i) .计次循环首 (m, j) .如果 (x [i] = y [j]) dp [i + 1] [j + 1] = dp [i] [j] + 1 .否则 dp [i + 1] [j + 1] = max (dp [i] [j + 1], dp [i + 1] [j]) .如果结束 .计次循环尾 () .计次循环尾 () 返回 (dp [n + 1] [m + 1]) |
|