feat: pin_cand_filter.lua 置顶候选项 #586

This commit is contained in:
Dvel 2024-02-01 00:30:17 +08:00
parent d3c47e922d
commit 86ebf99f4f
11 changed files with 447 additions and 202 deletions

View File

@ -3,50 +3,29 @@
#@/db_name custom_phrase.txt
#@/db_type tabledb
#
# 自定义文本
# 适用于全拼。
# 双拼默认为 custom_phrase_double.txt 需要手动创建,并更改上面的 db_name 为 custom_phrase_double.txt
# 自定义短语
# 可为方案增加一些要置顶的词汇及短语,编码可以随便起,不限于拼音,例如邮箱、手机号、常用短语等等。
#
# 适用于全拼。双拼默认为 custom_phrase_double.txt 需要手动创建,并更改上面的 db_name 为 custom_phrase_double.txt
#
# 以下固定的词汇及顺序纯属个人偏好,仅作示例,
# 可以增加自己的 .txt 文件,并在方案的 custom_phrase/user_dict 指定为自己的文件。
#
# 以 Tab 分割:汉字<Tab>编码<Tab>权重
# 以 Tab 分割:词汇<Tab>编码<Tab>权重
#
# 这个文件内的字词会占据最高权重(即排在候选项的最前面,因为指定了高权重 custom_phrase/initial_quality: 99
# 但不与其他翻译器互相造词,如果使用了完整编码,那么这个字或词将无法参与造词,即自造词无法被记住。
# 所以建议只固定非完整编码的字词「的de」应为「的d」「是shi」应为「是s」「仙剑xianjian」应为「仙剑xj」。
# 也不要写 a e o因为这三个本身就是完整编码写了则无法参与造词。
# 所以只建议固定非完整拼音的编码,如果需求是置顶指定拼音的候选项,请参考方案中的 pin_cand_filter。
#
# 最下面的英文是因为一些常用单词的第一候选项被纠错覆盖了,
# 比如 Amazon 被纠错为「a ma zong 阿妈粽」,
# 期望的 Amazon 跑到第二个候选项了,所以这里给它固定死喽。
# 最下面的英文是因为一些常用单词的第一候选项被纠错覆盖了,如 Amazon 被纠错为「a ma zong 阿妈粽」,期望的 Amazon 跑到第二个候选项了,所以这里给它固定死喽。
#
# version: "2023-11-13"
# version: "2024-02-01"
#
# 此行之后不能写注释
噷 hm
哼 hng
去 q 2
千 q 1
我 w 3
万 w 2
往 w 1
儿 r
他 t 4
她 t 3
它 t 2
祂 t 1
与 y 2
于 y 1
有 u 3
又 u 2
由 u 1
@ -56,122 +35,6 @@
已 i 2
亦 i 1
片 p 2
篇 p 1
是 s 4
时 s 3
使 s 2
式 s 1
的 d 3
地 d 2
得 d 1
发 f 2
分 f 1
个 g
和 h 2
或 h 1
及 j 5
将 j 4
即 j 3
既 j 2
继 j 1
可 k
了 l 4
啦 l 3
喽 l 2
嘞 l 1
在 z 3
再 z 2
自 z 1
想 x 3
像 x 2
向 x 1
才 c 2
从 c 1
吧 b 3
百 b 2
呗 b 1
那 n 4
哪 n 3
拿 n 2
呐 n 1
吗 m 3
嘛 m 2
呣 m 1
我们 wm
我们 wom
我们 wmen
你们 nm
你们 nim
你们 nmen
人们 rm
人们 renm
人们 rmen
他的 td 3
她的 td 2
它的 td 1
他的 tad 3
她的 tad 2
它的 tad 1
他的 tde 3
她的 tde 2
它的 tde 1
他们 tm 3
她们 tm 2
它们 tm 1
他们 tam 3
她们 tam 2
它们 tam 1
他们 tmen 3
她们 tmen 2
它们 tmen 1
那儿 nr 2
哪儿 nr 1
那儿 nar 2
哪儿 nar 1
那个 ng 2
哪个 ng 1
那个 nag 2
哪个 nag 1
那些 nx 2
哪些 nx 1
那些 nax 2
哪些 nax 1
那里 nl 2
哪里 nl 1
那里 nal 2
哪里 nal 1
那边 nb 2
哪边 nb 1
那边 nab 2
哪边 nab 1
那位 nw 2
哪位 nw 1
那位 naw 2
哪位 naw 1
这 zh
一个 ig
有个 ug
是一个 sig
@ -184,35 +47,6 @@
又又又 uuu
又双叒叕 uuuu
等等 dd
的地得 ddd
等等等等 dddd
刚刚 gg
才刚刚 cgg
知道 zd
不知道 bzd
往往 ww
哈哈 hh
看看 kk
常常 cc
想想 xx 2
想象 xx 1
隐约 yy
因为 yw
什么 sm
所以 sy
为什么 wsm
是不是 sbs
没什么 msm
有时候 ysh
有时候 yshh
有时候 yshou
什么的 smd
什么是 sms
什么啊 sma
go go
Golang golang
Hugo hugo

View File

@ -87,6 +87,7 @@ engine:
- lua_filter@search@radical_pinyin # 部件拆字辅码
- lua_filter@autocap_filter # 英文自动大写
- lua_filter@reduce_english_filter # 降低部分英语单词在候选项的位置
- lua_filter@pin_cand_filter # 置顶候选项
- uniquifier # 去重
@ -148,6 +149,42 @@ reduce_english_filter:
yan, yen]
# Lua 配置: 置顶候选项
# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。
# (对简繁转换无效,除非简繁文字一致 😰)
#
# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。
# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü
# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰
#
# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh
# 如 'ni hao' 会自动生成 'ni hao'、'ni h'
# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch'
# 如果同时写了 da zhuan 和 da zhong输入 da z 时,排在前面的的优先,除非明确指定 'da z'。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
# 示例:
# - 'le 了' # 输入 le 时,置顶「了」
# - 'la 啦' # 输入 la 时,置顶「啦」
# - 'ta 他 她 它' # 可以置顶多个字,按顺序排列
# - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。
# - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」
# - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置
# # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面
# - da zhuang 大专
# - da zhong 大众
# # 如果明确定义了简码形式,则完全使用简码形式
# - da z 打字
# - da zh 打仗
# # ⚠️ 双拼
# - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼
# - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的)
# 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台don't know why ...
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml

View File

@ -87,6 +87,7 @@ engine:
- lua_filter@search@radical_pinyin # 部件拆字辅码
- lua_filter@autocap_filter # 英文自动大写
- lua_filter@reduce_english_filter # 降低部分英语单词在候选项的位置
- lua_filter@pin_cand_filter # 置顶候选项
- uniquifier # 去重
@ -148,6 +149,42 @@ reduce_english_filter:
yan, yen]
# Lua 配置: 置顶候选项
# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。
# (对简繁转换无效,除非简繁文字一致 😰)
#
# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。
# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü
# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰
#
# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh
# 如 'ni hao' 会自动生成 'ni hao'、'ni h'
# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch'
# 如果同时写了 da zhuan 和 da zhong输入 da z 时,排在前面的的优先,除非明确指定 'da z'。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
# 示例:
# - 'le 了' # 输入 le 时,置顶「了」
# - 'la 啦' # 输入 la 时,置顶「啦」
# - 'ta 他 她 它' # 可以置顶多个字,按顺序排列
# - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。
# - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」
# - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置
# # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面
# - da zhuang 大专
# - da zhong 大众
# # 如果明确定义了简码形式,则完全使用简码形式
# - da z 打字
# - da zh 打仗
# # ⚠️ 双拼
# - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼
# - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的)
# 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台don't know why ...
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml

View File

@ -87,6 +87,7 @@ engine:
- lua_filter@search@radical_pinyin # 部件拆字辅码
- lua_filter@autocap_filter # 英文自动大写
- lua_filter@reduce_english_filter # 降低部分英语单词在候选项的位置
- lua_filter@pin_cand_filter # 置顶候选项
- uniquifier # 去重
@ -148,6 +149,42 @@ reduce_english_filter:
yan, yen]
# Lua 配置: 置顶候选项
# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。
# (对简繁转换无效,除非简繁文字一致 😰)
#
# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。
# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü
# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰
#
# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh
# 如 'ni hao' 会自动生成 'ni hao'、'ni h'
# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch'
# 如果同时写了 da zhuan 和 da zhong输入 da z 时,排在前面的的优先,除非明确指定 'da z'。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
# 示例:
# - 'le 了' # 输入 le 时,置顶「了」
# - 'la 啦' # 输入 la 时,置顶「啦」
# - 'ta 他 她 它' # 可以置顶多个字,按顺序排列
# - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。
# - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」
# - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置
# # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面
# - da zhuang 大专
# - da zhong 大众
# # 如果明确定义了简码形式,则完全使用简码形式
# - da z 打字
# - da zh 打仗
# # ⚠️ 双拼
# - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼
# - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的)
# 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台don't know why ...
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml

View File

@ -87,6 +87,7 @@ engine:
- lua_filter@search@radical_pinyin # 部件拆字辅码
- lua_filter@autocap_filter # 英文自动大写
- lua_filter@reduce_english_filter # 降低部分英语单词在候选项的位置
- lua_filter@pin_cand_filter # 置顶候选项
- uniquifier # 去重
@ -148,6 +149,42 @@ reduce_english_filter:
yan, yen]
# Lua 配置: 置顶候选项
# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。
# (对简繁转换无效,除非简繁文字一致 😰)
#
# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。
# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü
# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰
#
# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh
# 如 'ni hao' 会自动生成 'ni hao'、'ni h'
# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch'
# 如果同时写了 da zhuan 和 da zhong输入 da z 时,排在前面的的优先,除非明确指定 'da z'。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
# 示例:
# - 'le 了' # 输入 le 时,置顶「了」
# - 'la 啦' # 输入 la 时,置顶「啦」
# - 'ta 他 她 它' # 可以置顶多个字,按顺序排列
# - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。
# - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」
# - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置
# # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面
# - da zhuang 大专
# - da zhong 大众
# # 如果明确定义了简码形式,则完全使用简码形式
# - da z 打字
# - da zh 打仗
# # ⚠️ 双拼
# - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼
# - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的)
# 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台don't know why ...
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml

View File

@ -87,6 +87,7 @@ engine:
- lua_filter@search@radical_pinyin # 部件拆字辅码
- lua_filter@autocap_filter # 英文自动大写
- lua_filter@reduce_english_filter # 降低部分英语单词在候选项的位置
- lua_filter@pin_cand_filter # 置顶候选项
- uniquifier # 去重
@ -148,6 +149,42 @@ reduce_english_filter:
yan, yen]
# Lua 配置: 置顶候选项
# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。
# (对简繁转换无效,除非简繁文字一致 😰)
#
# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。
# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü
# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰
#
# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh
# 如 'ni hao' 会自动生成 'ni hao'、'ni h'
# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch'
# 如果同时写了 da zhuan 和 da zhong输入 da z 时,排在前面的的优先,除非明确指定 'da z'。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
# 示例:
# - 'le 了' # 输入 le 时,置顶「了」
# - 'la 啦' # 输入 la 时,置顶「啦」
# - 'ta 他 她 它' # 可以置顶多个字,按顺序排列
# - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。
# - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」
# - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置
# # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面
# - da zhuang 大专
# - da zhong 大众
# # 如果明确定义了简码形式,则完全使用简码形式
# - da z 打字
# - da zh 打仗
# # ⚠️ 双拼
# - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼
# - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的)
# 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台don't know why ...
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml

View File

@ -87,6 +87,7 @@ engine:
- lua_filter@search@radical_pinyin # 部件拆字辅码
- lua_filter@autocap_filter # 英文自动大写
- lua_filter@reduce_english_filter # 降低部分英语单词在候选项的位置
- lua_filter@pin_cand_filter # 置顶候选项
- uniquifier # 去重
@ -148,6 +149,42 @@ reduce_english_filter:
yan, yen]
# Lua 配置: 置顶候选项
# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。
# (对简繁转换无效,除非简繁文字一致 😰)
#
# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。
# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü
# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰
#
# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh
# 如 'ni hao' 会自动生成 'ni hao'、'ni h'
# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch'
# 如果同时写了 da zhuan 和 da zhong输入 da z 时,排在前面的的优先,除非明确指定 'da z'。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
# 示例:
# - 'le 了' # 输入 le 时,置顶「了」
# - 'la 啦' # 输入 la 时,置顶「啦」
# - 'ta 他 她 它' # 可以置顶多个字,按顺序排列
# - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。
# - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」
# - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置
# # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面
# - da zhuang 大专
# - da zhong 大众
# # 如果明确定义了简码形式,则完全使用简码形式
# - da z 打字
# - da zh 打仗
# # ⚠️ 双拼
# - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼
# - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的)
# 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台don't know why ...
- d 的
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml

View File

@ -1,4 +1,5 @@
-- 置顶候选项
-- Powered By ChatGPT
local function isInList(list, str)
for i, v in ipairs(list) do
@ -12,39 +13,105 @@ end
local M = {}
function M.init(env)
local config = env.engine.schema.config
env.name_space = env.name_space:gsub("^*", "")
local list = env.engine.schema.config:get_list(env.name_space)
-- 如果定义了 'da zhuan' 或 'da zhong' ,会自动生成 'da z' 和 'da zh'。
-- 然而,如果明确定义了 'da z' 或 'da zh',则会优先使用这些明确自定义的简码,用 set 来做判断。
local set = {}
for i = 0, list.size - 1 do
local preedit, texts = list:get_value_at(i).value:match("([^\t]+)\t(.+)")
if preedit and texts then
set[preedit] = true
end
end
-- 遍历要置顶的候选项列表,将其转换为 table 存储到 M.pin_cands
-- 'ta 他 她 它' → M.pin_cands["ta"] = {"他", "她", "它"},
-- 'l 了 啦' → M.pin_cands["l"] = {"了", "啦"}
-- 'ta 他 她 它' → M.pin_cands["ta"] = {"他", "她", "它"}
--
-- 对于词汇preedit 包含空格),同时生成简码的拼写(最后一个空格后的首字母),如:
-- 'ni hao 你好 拟好' → M.pin_cands["ni hao"] = {"你好", "拟好"}
local list = config:get_list(env.name_space)
-- → M.pin_cands["ni h"] = {"你好", "拟好"}
--
-- 如果最后一个空格后以 zh ch sh 开头,额外再生成 zh, ch, sh 的拼写,如:
-- 'zhi chi 支持' → M.pin_cands["zhi chi"] = {"支持"}
-- → M.pin_cands["zhi c"] = {"支持"}
-- → M.pin_cands["zhi ch"] = {"支持"}
--
-- 如果同时定义了 'da zhuan 大专' 'da zhong 大众',会生成:
-- M.pin_cands["da zhuan"] = {"大专"}
-- M.pin_cands["da zhong"] = {"大众"}
-- M.pin_cands["da z"] = {"大专", "大众"} -- 先写的排在前面
-- M.pin_cands["da zh"] = {"大专", "大众"} -- 先写的排在前面
--
-- 如果同时定义了 'da zhuan 大专' 'da zhong 大众' 且明确定义了简码形式 'da z 打字',会生成:
-- M.pin_cands["da zhuan"] = {"大专"}
-- M.pin_cands["da zhong"] = {"大众"}
-- M.pin_cands["da z"] = {"打字"} -- 明确定义的优先级更高
-- M.pin_cands["da zh"] = {"大专", "大众"} -- 没明确定义的,仍然按上面的方式生成
M.pin_cands = {}
for i = 0, list.size - 1 do
local code, texts = list:get_value_at(i).value:match("([^\t]+)\t(.+)")
if code and texts then
M.pin_cands[code] = {}
local preedit, texts = list:get_value_at(i).value:match("([^\t]+)\t(.+)")
if preedit and texts then
M.pin_cands[preedit] = {}
-- 按照配置生成完整的拼写
for text in texts:gmatch("%S+") do
table.insert(M.pin_cands[code], text)
table.insert(M.pin_cands[preedit], text)
end
-- 额外处理包含空格的 preedit增加最后一个拼音的首字母和 zh, ch, sh 的简码
if preedit:find(" ") then
local preceding_part, last_part = preedit:match("^(.+)%s(%S+)$")
if last_part then
-- 生成最后一个拼音的简码拼写(最后一个空格后的首字母),如 ni hao 生成 ni h
local p1 = preceding_part .. " " .. last_part:sub(1, 1)
-- 只在没有明确定义此简码时才生成,已有的追加,没有的直接赋值
if not set[p1] then
if M.pin_cands[p1] ~= nil then
for text in texts:gmatch("%S+") do
table.insert(M.pin_cands[p1], text)
end
else
M.pin_cands[p1] = M.pin_cands[preedit]
end
end
-- 生成最后一个拼音的 zh, ch, sh 的简码拼写(最后一个空格后以 zh ch sh 开头),如 zhi chi 生成 zhi ch
-- if last_part:match("^(zh|ch|sh)") then -- 😰 ChatGPT 诚欺我
if last_part:match("^zh") or last_part:match("^ch") or last_part:match("^sh") then
local p2 = preceding_part .. " " .. last_part:sub(1, 2)
-- 只在没有明确定义此简码时才生成,已有的追加,没有的直接赋值
if not set[p2] then
if M.pin_cands[p2] ~= nil then
for text in texts:gmatch("%S+") do
table.insert(M.pin_cands[p2], text)
end
else
M.pin_cands[p2] = M.pin_cands[preedit]
end
end
end
end
end
end
end
end
function M.func(input)
local pined = {}
local others = {}
local pined = {} -- 提升的候选项
local others = {} -- 其余候选项
local pined_count = 0
for cand in input:iter() do
local pins = M.pin_cands[cand.preedit]
if pins then
-- 给 pined 几个空字符串占位元素,后面直接 pined[idx] = cand 确保 pined 与 pins 顺序一致
if #pined < #pins then
for _ = 1, #pins do
local texts = M.pin_cands[cand.preedit]
if texts then
-- 给 pined 几个空字符串占位元素,后面直接 pined[idx] = cand 确保 pined 与 texts 顺序一致
if #pined < #texts then
for _ = 1, #texts do
table.insert(pined, '')
end
end
-- 要置顶的放到 pined 中,其余的放到 others
local ok, idx = isInList(pins, cand.text)
local ok, idx = isInList(texts, cand.text)
if ok then
pined[idx] = cand
pined_count = pined_count + 1
@ -52,7 +119,7 @@ function M.func(input)
table.insert(others, cand)
end
-- 找齐了或者 others 太大了,就不找了,一般前 5 个就找完了
if pined_count == #pins or #others > 50 then
if pined_count == #texts or #others > 50 then
break
end
else

View File

@ -4,6 +4,10 @@
## 2024-02-01 🆕
🆕 `pin_cand_filter.lua` 置顶候选项 [#586](https://github.com/iDvel/rime-ice/issues/586)
## 2024-01-29 🆕 ⚠️
🆕 [部件拆字方案](https://github.com/mirtlecn/rime-radical-pinyin) 反查、辅码 ([#643](https://github.com/iDvel/rime-ice/pull/643))

View File

@ -41,19 +41,11 @@ reduce_english_filter = require("reduce_english_filter")
-- 辅码https://github.com/mirtlecn/rime-radical-pinyin/blob/master/search.lua.md
search = require("search")
-- 默认未启用:
-- 词条置顶
-- 满足左边的 cand.preedit 时,将右边的 cand 按顺序置顶。
-- 在 engine/filters 增加 - lua_filter@pin_cand_filter
-- 在方案里写配置项:
-- pin_cand_filter:
-- - "l 了"
-- - "le 了"
-- - "ta 他 她 它"
-- - "ni hao 你好 拟好"
-- 置顶候选项
pin_cand_filter = require("pin_cand_filter")
-- 默认未启用:
-- 长词优先(全拼)
-- 在 engine/filters 增加 - lua_filter@long_word_filter
-- 在方案里写配置项:

View File

@ -6,7 +6,7 @@
schema:
schema_id: rime_ice
name: 雾凇拼音
version: "2024-01-30"
version: "2024-02-01"
author:
- Dvel
description: |
@ -76,6 +76,7 @@ engine:
- lua_filter@v_filter # v 模式 symbols 优先(否则是英文优先)
- lua_filter@autocap_filter # 英文自动大写
- lua_filter@reduce_english_filter # 降低部分英语单词在候选项的位置
- lua_filter@pin_cand_filter # 置顶候选项
- uniquifier # 去重
@ -137,6 +138,131 @@ reduce_english_filter:
yan, yen]
# Lua 配置: 置顶候选项
# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。
# (对简繁转换无效,除非简繁文字一致 😰)
#
# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。
# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü
# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰
#
# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh
# 如 'ni hao' 会自动生成 'ni hao'、'ni h'
# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch'
# 如果同时写了 da zhuan 和 da zhong输入 da z 时,排在前面的的优先,除非明确指定 'da z'。
pin_cand_filter:
# 格式:编码<Tab>字词1<Space>字词2……
# 示例:
# - 'le 了' # 输入 le 时,置顶「了」
# - 'la 啦' # 输入 la 时,置顶「啦」
# - 'ta 他 她 它' # 可以置顶多个字,按顺序排列
# - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。
# - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」
# - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格
# - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置
# # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面
# - da zhuang 大专
# - da zhong 大众
# # 如果明确定义了简码形式,则完全使用简码形式
# - da z 打字
# - da zh 打仗
#
# ⚙️ 以下是个人习惯,仅供参考,可以打个补丁来覆盖。
# 单编码
- q 去 千
- w 我 万 往
- e 呃
- r 让 人
- t 他 她 它 祂
- y 与 于
# - u 在 custom_phrase 置顶
# - i 在 custom_phrase 置顶
- o 哦
- p 片 篇
- a 啊
- s 是 时 使 式
- d 的 地 得
- f 发 放 分
- g 个 各
- h 和 或
- j 及 将 即 既 继
- k 可
- l 了 啦 喽 嘞
- z 在 再 自
- x 想 像 向
- c 才 从
# - v
- b 吧 把 呗 百
- n 那 哪 拿 呐
- m 吗 嘛 呣
# 单字
- de 的 地 得
- na 那 哪 拿
- ta 他 她 它 祂
- er 而 儿 二
- ma 吗 嘛 妈
- zhe 这 着
- hai 还
- you 有 🈶 又 由
- mei 没
- bing 并
- tong 同
- yu 与 于
- he 和
- ji 及 即 既
- shi 是 时
- la 啦 拉
- xing 行
- dian 点
- yao 要
- kan 看
- bei 被
- zuo 做
- dao 到 倒
- xiang 想 像 向
- zhi 只
- cai 才
- gang 刚
- jiu 就
# ta、na
- ta de 他的 她的 它的
- 'tad 他的 她的 它的' # 英文单词 tad 造成 preedit 为 tad从而让 ta d 的置顶未生效,需要明确再写上 tad
- ta men 他们 她们 它们
- ta men de 他们的 她们的 它们的
- na er 那儿 哪儿
- na ge 那个 哪个
- na xie 那些 哪些
- na li 那里 哪里
- na bian 那边 哪边
- na bian er 那边儿 哪边儿
- na wei 那位 哪位
# 简码
- zh 这
- d d 等等
- 'dd 等等' # 覆盖英文单词 D&D
- d d d d 等等等等
- g g 刚刚
- c g g 才刚刚
- z d 知道
- b z d 不知道
- w w 往往
- h h 哈哈
- k k 看看
- c c 常常
- x x 想想 🤔 想象
- y w 因为
- s m 什么
- w s m 为什么
- s b s 是不是
- m s m 没什么
- s m d 什么的
- s m s 什么是
- 'sms 什么是' # 覆盖英文单词 SMS
- s m a 什么啊
- 'sma 什么啊' # 覆盖英文单词 S码
# 主翻译器,拼音
translator:
dictionary: rime_ice # 挂载词库 rime_ice.dict.yaml