|
阅读:1713回复:9
合并用户码表
灌水积分贴,合并用户码表逻辑
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 |
|
|
板凳#
发布于:2026-05-18 21:21
Hi,
请问你是在Linux下面执行awk的命令么? 码表文件是GB18030编码么?还是先将码表转为utf-8再处理的? |
|
|
地板#
发布于:2026-05-18 22:32
主码表和分词库都有的词,这个词应该还是标记为主词库的更合适对吧。
也就是除了用户码表外,内部处理时不应修改所属词库。 |
|
|
4楼#
发布于:2026-05-19 08:30
看上去“盘古大陆”是按测试的情况写出来分享的,所以周大程序的处理逻辑实际上不一样?
我在论坛中搜索了下,现有帮助说明中也没有找到关于「码表优化」和「合并用户码表」的说明。 |
|
|
5楼#
发布于:2026-05-19 08:54
|
|
|
6楼#
发布于:2026-05-19 09:03
|
|
|
7楼#
发布于:2026-05-19 09:09
|
|
|
8楼#
发布于:2026-05-19 09:26
|
|
|
9楼#
发布于:2026-05-19 10:00
|
|