|
阅读:630回复:1
合并用户码表
灌水积分贴,合并用户码表逻辑
1、合并用户码表会将用户码表中的信息合并到主码表中; 2、当主码表和分词库中有相同的字词时,会将主码表中对应的字词删除; 3、执行“合并用户码表”时会对当前的“输入法”方案进行合并,不会影响其他“输入法”方案; 4、每执行一次“合并用户码表”时,只会对执行一次上面的判断逻辑,比如:
|
|
|
沙发#
发布于:2026-01-23 12:30
使用输入法自带的合并用户码表,发现了以下两点不太符合我习惯的地方。
1、合并拼音码表后,表头信息会改变。例如:会将辅助码表的配置从配置文件中写入码表文件; 2、会将词单字分开。 为了满足自定义格式,也就是保持表头不变,将单字和词放在一起这里提供一个手动合并码表的参考,使用的工具为awk和vim。这里提供三个脚本,一个是vim中去除重复行的脚本,另两个是用awk转换码表格式的脚本。三者配合即可手动实现”码表优化“和”合并用户码表“的功能。 码表格式1: a 啊 阿 呵 腌 嗄 锕 吖 aba 阿坝 阿爸 abao 阿宝 码表格式2: a 啊 a 阿 a 呵 a 腌 a 嗄 a 锕 a 吖 aba 阿坝 aba 阿爸 abao 阿宝 从格式1到格式2的awk脚本split.awk为: {
key = $1 # 第一个字段是键
for (i = 2; i <= NF; i++) { # 遍历剩余字段(合并后的值)
print key, $i # 输出键 + 单个值
}
}
从格式2到格式1的awk脚本script.awk为(这也就是“码表优化”功能): BEGIN {
FS = "[ \t]+" # 字段间可能有多个空格或制表符
}
{
key = $1
value = ""
for (i = 2; i <= NF; i++) {
value = value (i == 2 ? "" : " ") $i
}
if (!(key in key_index)) {
# 第一次见到这个键,记录索引
key_index[key] = ++key_count
order[key_count] = key
# 初始化值(不加前导空格)
values[key] = value
} else {
# 追加值,确保格式整洁
values[key] = values[key] " " value
}
}
END {
# 按原始顺序输出
for (i = 1; i <= key_count; i++) {
key = order[i]
print key, values[key]
}
}awk的命令格式为:awk -f script <filename>
vim中去除重复的行 function! Remove() " 不改变文件顺序删除重复靠后的行
let i=1|g/^/s//\=i.'|'/|let i+=1
sort! /^\d\{-}|/ " 将行号后面的内容进行倒序排列
g/^\d\{-}|\(.*\)$\n\d\{-}|\1$/d " 删除与下一行内容相同的行
sort n
%s/\d\{-}|//
endfunction |
|