rime中州韵小狼毫 生字注音滤镜 汉字注音滤镜

本文详细介绍了如何在Rime中州韵小狼毫输入法中配置生字注音滤镜,包括使用pinyinAdding.txt管理汉字注音,lua脚本加载和处理词组,以及通过lua_filter实现实时注音功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

教程目录:rime中州韵小狼毫须鼠管安装配置教程 保姆级教程 100+增强功能配置教程

在中文环境下,多音字是比较常见的现象。对于一些不常见的生僻字,或者一些用于地名,人名中的常见字的冷门读音,如果不能正确的阅读,例如把 荥阳 读成了 miāo yáng,则会怡笑大方。

今天我们在rime中州韵小狼毫输入法中配置一个注音滤镜,以便我们在日常的文字输入时,可以经常的,实时的学习、复习、强化这些文字的读音,不做白字先生。

先睹为快

本文所分离的在rime中州韵小狼毫须鼠管输入法中的生字注音效果如下👇:
20240108191021

pinyinAdding.txt

首先,我们需要一个文档来记录和管理汉字与注音的信息。pinyinAdding.txt 文档的内容截取部分展示如下👇:

冔	冔(xǔ)
玏	玏(lè)
鹯	鹯(zhān)
亶	亶(dǎn)
荥	荥(yíng)
荥阳	荥(xíng)阳

👆以上,pinyinAdding.txt 文档中的内容主要有两列,以 tag 制表符分隔。第一列是汉字或者词组,第二列是带有注音的词组。顺序无先后。但在后续的lua滤镜中,会被处理成优先匹配词组的逻辑。例如词组荥阳会优先匹配荥(xíng)阳,而不是匹配成 荥(yíng)阳

pinyinAddingModule.lua

我们有了字典文档 pinyinAdding.txt,但这并没有办法在输入引擎中直接使用。我们还需要一个lua脚本,将 pinyinAdding.txt 文档内的词组加载到lua程序中。pinyinAddingModule.lua 脚本文档中的脚本如下👇:

-- pinyinAddingModule.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>

local M={}
local dict={}
local dbgFlg = true

--引入系统变更处理模块
local ok, sysInfoRes = pcall(require, 'sysInfo')
local currentDir = sysInfoRes.currentDir
local userName = sysInfoRes.userName
--引入utf8String,用于处理utf8字符串
local of,utf8Str = pcall(require, 'utf8String')
local utf8Sub = utf8Str.utf8Sub
local utf8Len = utf8Str.utf8Len

--设置 dbg 开关
local function setDbg(flg)
	dbgFlg = flg
	sysInfoRes.setDbg(flg)
	
	print('pinyinAddingModule dbgFlg is '..tostring(dbgFlg))
end

--将文档处理成行数组
local function files_to_lines(...)
	if dbgFlg then
		print("--->files_to_lines called here")
	end
	local tab=setmetatable({},{__index=table})
	local index=1
	for i,filename in next,{...} do
		local fn = io.open(filename)
		if fn then
			for line in fn:lines() do
				if not line or #line > 0 then
					tab:insert(line)
				end
			end
			fn:close()
		end
	end
	
	if dbgFlg then
		print("--->files_to_lines completed here")
	end
	return tab
end

local function dictload(...) -- filename)
	if dbgFlg then
		print("-->dictload called here")
	end
	
	local lines=files_to_lines(...)
	local thisDict={}
	
	for i,line in next ,lines do
		if not line:match("^%s*#") then  -- 第一字 # 为注释行
			local key,val = string.match(line,"(.+)\t(.+)")
			if nil ~= key then
				--此处,如果key 已经存在,则使用后来的值顶替旧的值
				if ''~=val then
					thisDict[key] = val
				end
			end
		end
	end
	
	if dbgFlg then
		print("-->dictload completed here")
	end
	return thisDict
end

--===========================test========================
local function test(printPrefix)
	if nil == printPrefix then
		printPrefix = ' '
	end
	if dbgFlg then
		print(printPrefix,'pinyinAddingModule test starting...')
		
		sysInfoRes.test(printPrefix..' ')
		
		for k,v in pairs(dict) do
			if dbgFlg then
				print(printPrefix..k..'\t'..v)
			end
		end
	end
end

--这是一个递归函数,用于在给定的字符串中查找最大能匹配的子串
local function getItmInDicByStr(Str)
	Str = Str or ''
	if ''==Str then
		--返回子串值,匹配值,匹配长度
		return '','',0
	end
	local itmKey,itmLen,itmVal,strLen,flg
	strLen = utf8Len(Str)
	flg=false
	
	for idx=strLen,1,-1 do
		itmKey = utf8Sub(Str,1,idx)
		if''~=itmKey then
			itmVal = dict[itmKey]
			if nil~=itmVal then
				itmLen = idx
				flg = true
				break
			end
		end
	end
	
	if flg then
		return itmKey,itmVal,itmLen
	else
		return '','',0
	end
end

local function pinyinAdding(k)
	k = k or ''
	if ''==k then
		return k
	end
	
	local valStr,kLen
	local subK,subKVal,subKLen
	local matchPosition
	
	valStr = ''
	kLen = utf8Len(k)
	matchPosition = 1
	while matchPosition <= kLen do
		subK,subKVal,subKLen = getItmInDicByStr(utf8Sub(k,matchPosition,kLen))
		
		if ''==subK then
			valStr = valStr..utf8Sub(k,matchPosition,1)
			matchPosition = matchPosition + 1
		else
			valStr =valStr..subKVal
			matchPosition = matchPosition + subKLen
		end
	end
	
	return valStr
end

function M.init(...)
	local files={...}
	--文件名不支持中文,其中 # 开始的行为注释行
	table.insert(files,"pinyinAdding.txt")
	
	for i,v in next, files do
		files[i] = currentDir().."/".. v
	end
	dict= dictload(table.unpack(files))
	
	--抛出功能函数
	M.pinyinAdding = pinyinAdding
	M.pinyinAddingT = pinyinAdding
	M.setDbg = setDbg
	M.test = test
end

M.init()

return M

👆以上脚本中,我们将指定的 pinyinAdding.txt 文档中的词组加载为一个 dict 的字典对象,然后给出了一个检索字典的方法 pinyinAdding。我们通过方法pinyinAdding可以方便的检索出指定关键字的注音版本词组。

pinyinAdding_Filter.lua

在脚本文档 pinyinAddingModule.lua 中,我们加载并定义了词组的检索方法。现在我们需要在脚本文档 pinyinAdding_Filter.lua 内将词组检索方法整理成rime引擎的滤镜方法,pinyinAdding_Filter.lua文档内的脚本如下👇:

-- phraseReplace_Filter.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
--[[
这个过滤器的主要作用是,对于候选项中命中的选项(OR 内容),用其指定的内容来代替,如果没有指定,则使用 * 替换
由于这个过滤器会改变候选项的内容(主要是会减少候选项数量),所以请将这个过滤器放在其它过滤器的最前端使用
]]
local phraseShown = ''

local ok, py = pcall(require, 'pinyinAddingModule')

--最长的comment长度限制
local maxLenOfComment = 250

local function pinyinAdding(input, env)
	--获取选项pinyin开关状态
	local pySwitchFlg = env.engine.context:get_option("pinyin") or false
	--如果pySwitchFlg是true状态,则替换原选项,如果是false状态,则在comment中注音
	local pyInCommentFlg = true
	if pySwitchFlg then
		pyInCommentFlg = false
	end
	for cand in input:iter() do
		local txtWithPy = py.pinyinAdding(cand.text)
		if nil == txtWithPy then
			--没有获取到 txtWithPy,则不做处理
			yield(cand)
		elseif txtWithPy == cand.text then
			--txtWithPy 与 原候选词一致,则不做处理
			yield(cand)
		else
			--获取到了 txtWithPy,且不与原候选词一致
			if pyInCommentFlg or string.find(cand.comment,'☯') then
				--如果需要加到comment里,或者这是一个自造词,为了不影响自造词功能,也需要加到commnet里
				if ''==cand.comment then
					cand:get_genuine().comment = txtWithPy
				else
					if utf8.len(cand.comment) < 5 then
						cand:get_genuine().comment = cand.comment..'✔'..txtWithPy
					else
						cand:get_genuine().comment = cand.comment..'\r✔'..txtWithPy
					end
				end
				yield(cand)
			else
				--如果不加到comment,则替换原选项,注意,替换原选项,会影响自动调频功能
				cand.text = txtWithPy
				if cand.text == txtWithPy then
					yield(cand)
				else
					yield(Candidate("word", cand.start, cand._end, txtWithPy, cand.comment))
				end
			end
		end
	end
end

return pinyinAdding

👆以上脚本中, 我们定义了滤镜方法 pinyinAdding 并返回/抛出了该方法。

💣注意:
以上所述文档 pinyinAdding.txtpinyinAddingModule.luapinyinAdding_Filter.lua 三个文档,应该位于 用户文件夹 下的 lua 文件夹内。如下👇:
20240108185223

rime.lua

以上我们完成了 pinyinAdding 滤镜方法的定义,现在我们需要在文档 rime.lua 中将该 pinyinAdding 滤镜方法映射成 pinyinAdding_Filter 滤镜接口。我们在 rime.lua 中增加以下👇脚本:

help_translator = require("help")
inputShow_translator = require("inputShow")
inputShow_Filter = require("inputShow_Filter")
Upper_Filter = require("Upper_Filter")
dic_4w_Filter = require("dic_4w_Filter")
phraseReplace_Filter = require("phraseReplace_Filter")
pinyinAdding_Filter = require("pinyinAdding_Filter")

👆以上脚本中,注音最后一行的 pinyinAdding_Filter 的定义。

wubi_pinyin.custom.yaml

以上步骤中,我们完成了pinyinAdding_Filter滤镜的定义。现在万事俱备,只欠东风了。我们只需要在我们的输入方案中配置引用该 pinyinAdding_Filter 滤镜,即可看到文字注音的效果了。

现在我们以 五笔・拼音 输入方案为例来配置生字注音滤镜。我们在 五笔・拼音输入方案的方案文档 wubi_pinyin.schema.yaml 的补丁文档 wubi_pinyin.custom.yaml 加入以下👇配置:

patch:
  switches/+: #增加以下开关
    - name: pinyin					# 这个开关用于标记是否打开拼音滤镜
      reset: 0
      states: [Off, pīnyīn]
  engine/filters:									# 设置以下filter
    - simplifier
    # 下面的滤镜是comment滤镜,不会改变候选项列表
    - lua_filter@pinyinAdding_Filter				# pinyin滤镜,用于对候选项中的字添加拼音

👆以上的配置中,我们增加了两项内容,一个是switch开关pinyin, 一个是lua_filter 滤镜 pinyinAdding_Filter。这是因为我们在 pinyinAdding_Filter.lua 脚本中会检测开关pinyin的状态以决定是否启用滤镜功能。如下👇:
20240108190137

💣注意:
文档 rime.luawubi_pinyin.custom.yaml 都应该位于 用户文件夹下,这不需要再多说什么了。

pinyinAdding.txt/pinyinAddingModule.lua/pinyinAdding_Filter.lua/rime.lua/wubi_pinyin.custom.yaml 文档

👆以上所述 pinyinAdding.txtpinyinAddingModule.luapinyinAdding_Filter.luarime.luawubi_pinyin.custom.yaml 五个文档,你也可以在 rime中州韵小狼毫 生字注音滤镜.zip 下载取用。

效果欣赏

做完了以上的配置工作,不要忘了 重新部署 你的 rime。然后你就应该能够观察到文字注音效果了。如下👇:
20240108191021

小结

本文分享了一种在rime中州韵小狼毫须鼠管输入法中配置生字注音滤镜的方法,并以五笔・拼音 输入方案为例,配置并演示了生字注音滤镜的功能效果。本文所配置文档共5个,其中 pinyinAdding.txt 文档为词组管理文档,通过这个文档可以非常方便的增删管理生字及其注音信息;pinyinAddingModule.lua 脚本文档提供了 pinyinAdding.txt 词组的加载和解析功能,并提提供了检索方法的接口;pinyinAdding_Filter.lua 文档定义了基于rime引擎接口的滤镜方法;最后我们在 rime.lua 脚本和 wubi_pinyin.custom.yaml 文档中配置和使用了该滤镜。并在最终的功能效果中观察到了预期的功能效果。

简介 这是一套按照绝大多数人习惯配置优化好的小狼毫。 小狼毫是一款优秀的开源免费输入法平台,可定制性极强,无任何广告骚扰和隐私泄露的风险,但要配置好它,对于不少人是比较困难的。为此,我们把它进行了全方位配置,以做到各种需求都可拿来即用,不需折腾。 对于喜欢折腾的朋友,本套小狼毫的所有方案和码表都是开放的,同时附带了丰富的功能导向的修改指南,非常方便二次修改。 主要特色 1.包含86版五笔、98版五笔;全拼、双拼(几乎囊括当前所有主流双拼方案);五笔画、手写(方便输入疑难生僻字);快捷英文等。 2.按照大陆简体习惯进行了修改和优化,不需任何处理,直接输入简体中文;词频文件换成了大陆语料库提取后的词频,更适合大陆用户习惯。 3.从原始安装包提取的便携版本,采用主流压缩程序制作成自解压程序包,双击即可部署。安装部署参照原版,大幅度优化后,写成纯文本格式的批处理脚本代码,全程向导式简单操作,确保明码无坑,安全放心,也便于修改。默认安装路径改到D:盘(无D:盘时会自动定位到C:盘),数据安全,不易丢失。 4.五笔状态下支持拼音和中英反查,按z后再输入拼音或英文即可;全拼状态下不需任何引导键,直接输入单词即可输出英文单词的中文释义;拼音状态输入“`”可进入笔画输入,使用横(h)竖(s)撇(p)捺(n)/点(d)折(z),逐个笔画“拼”出汉字。 5.整合了图形化设置工具,以解决小狼毫的参数图形化设置不便的问题。 6.部署时可自行选择主打输入方案,选好即用,毋需复杂设置和切换;快捷键尽量与传统输入法和主流输入法兼容,基本不需学习; 7.附带详尽的说明文档。除了网上现有的文档外,专门按照修改目的为向导整理出来的修改指南,只需搜索要修改的关键词即可快速找到修改方法,DIY定制无比方便。 8.提供方便、灵活、强悍的符号输入方法,一种符号可多种方式输入; 9.可快捷输入当前日期、时间、星期、农历,自动进行数字大小写转换; 10.支持快捷调用外部程序,如命令行、Office软件、截图工具(已经整合)、手写工具、打开特定网页等。 安装 使用WinRAR生成的自解压压缩包,双击后会自动解压并启动部署程序。如果已经解压,可双击“!install!.cmd”启动部署程序。之后请在选项中选择所需的方案即可。 注意:多数劣质杀软病毒会把自解压格式的压缩包和脚本代码一律当成病毒。相信杀软的请切勿使用。 输入法调用热键 Ctrl+Shift+1。 热键修改方法:控制面板→时钟和区域→区域→格式→语言首选项→拼写、键入和盘符设置→高级键盘设置→输入语言热键,选中要设置的输入法,点击更改按键顺序,然后指定自己需要的快捷键。 临时中英切换:左Shift。修改:记事本打开default.custom.yaml,修改“Shift_L: commit_code”为自己需要的键。 输入法码表选择菜单:Ctrl+` (即~)。修改方法:用记事本打开default.custom.yaml,修改“hotkeys:”下面的热键。 五笔输入法的临时拼音:按z,然后紧跟后面输入拼音即可。五笔状态下也可直接输入拼音,但不支持整句。依赖于luna_pinyin.schema.yaml,如果此文件缺失或五笔方案文件wubi86.schema.yaml中“reverse_lookup:”对它的引用不正确,则无效;如果不需要拼音干扰正常输入,可对五笔方案文件wubi86.schema.yaml中“reverse_lookup:”下的拼音字典引用文件名进行修改,随意改成不存在的文件的名称即可。 深山红叶五笔特殊符号输入方法 编码原则:取小优先,能借则借,末Z识别。 取小优先:符号信息量少,因此按照最小化外观部件拆分原则拆分。比如:÷,拆为:点横点,此时只有三码,按照“末Z识别”原则,末尾重复最末编码(点),或者加z,即:点横点点,或:点横点z。 能借则借:即借用现成的相同或近似的字母。如ā,拆为:横a,不足四码,末尾重复末编码或加z进行识别,即:横aa,或:横az。其他如?、‰等,小圈就借用字母O为编码。 末Z识别:前面已经谈及它的含义,它包含两个含义:末,即重复末编码;Z,即不足四码打Z识别码。 考虑到符号没有明显笔顺的特殊性,词库中对编码采取了容错处理,比如?,可以是:OCC或OCZ,即先要圈再打里面内容;也可以倒过来,COO或COZ。 有些不方便编码的符号集,可使用它的俗称名称的五笔编码,比如文档中要用的编号,就按照“编号”输入,可打出“①②③④⑤⑥⑦⑧⑨⑩??????????”等符号集。 拼音用户也可参照此种编码模式,按照最小优先的原则,以拼音的点-d、横-h等方式制作拼音的符号编码,以方便自己的输入。 例:↑ 折竖z < 撇捺z ♀ O横竖z ↙ 撇折z 当前日期、时间输入方法 可输出多种格式的日期,按需选用。 所有输入方案状态下均同时支持五笔、拼音的全拼和简拼、英文方式输入。 五笔:以五笔编码输入:当前日期、日期、年月日均可; 拼音:以日期、当前日期、年月日、星期、农历的简拼 rq dqrq nyq xq、nl等输入均可; 英文:以 date week now输入均可。 外部程序调用 小狼毫输入状态下,输入以下指令,即可调用外部程序。这些指令通常以“/”后面加上目标命令的名称、文件名等的2-3位首字母构成。可根据自己的习惯修改。 注意:以下只是示例,你可能需要根据实际情况进行修改! /sx 即“手写”的拼音首字母,即可呼出手写功能。从搜狗拼音中提取的手写模块。 /set 对小狼毫进行图形化配置(set) /gx /sg 自动下载搜狗拼音的最新网络热词。下载后保存在小狼毫五笔拼音输入法目录下的\data\luna_pinyin.sougou_network_words.dict.yaml。合并到自己的词库即可。 /jsq 计算器 /kzmb /con 控制面板 /cmd 命令行窗口 /ca /zt /jt /zp 打开抓图/截图工具 /exc Excel表格 /wor Word文字处理 /ppt Powerpoint幻灯片 /wps WPS字处理 /et WPS表格 /wpp WPS演示 /bd 打开百度搜索(以默认浏览器) /tb 打开淘宝网 /ya 打开yaml在线查验网 如果输入上述命令后不能打开,说明相关程序的默认安装路径与设置的不一致。此时请用文本编辑器打开小狼毫五笔拼音输入法目录下的 \data\rime.lua,找到function date_translator(input, seg)这个段,对下面的路径进行修改。 修改时,注意路径中不要包含中文字符、路径的分隔符必须是双杠符号! 修改、存盘后,将这个改好的rime.lua复制并覆盖替换小狼毫用户数据目录中的同名文件(默认目录在c:\Users\Administrator\AppData\Roaming\rime。可在系统托盘的小狼毫“中”字输入法图标上右击鼠标,选择“用户文件夹”来打开当前实际的用户目录),然后点击“重新部署”,即可生效。 当然,你也可以参照现有格式添加、删除或修改相关程序。 符号通用快捷输入 五笔状态下可以按照前述方法直接打出特殊符号。 另外,五笔码表对特殊符号使用常用名称进行了五笔编码,为避免与某些常用词发生重码,当通过名称编码打不出来时,可添加“符号”二字在名称后面进行编码,比如“办公符号”等等。需要本套五笔词库的支持,换其他词库则不保证实现。 所有输入法状态下,输入半角 / 号作为引导符,后面跟上符号类型的拼音缩写,即可输入。比如:/sb 可输出上标符号、/lm 可输出罗马数字,等等。 /fh 符号 /dn 电脑 /xq 象棋 /mj 麻将 /sz 色子 /pk 扑克 /bq 表情 /tq 天气 /yy 音乐 /lx 两性 /bg 八卦 /tt 天体 /xz 星座 /xh 星号 /fk 方块 /jh 几何 /sx 数字 /szq 数字圈 /zmq 字母圈 /zmh 字母弧 /0等 各种数字 /szm 苏州码 /lm 罗马数字 /lmd 大写罗马 /sb 上标 /xb 下标 /xl 希腊字母 /xld 大写希腊 /ey 俄语 /eyd 大写俄语 /yf 月份 /rq 日期 /yr 曜日 /sj 时间 /tg 天干 /dz 地支 /jq 节气 /dw 单位 /hb 货币 /jg 结构 /pp 偏旁 /kx 康熙部首 /bh 笔划 /bd 标点 /py 拼音 /hzq 汉字圈 /hzh 汉字弧 /sd 声调 /jm 假名 /hw 韩文 Z键扩展简码 考虑到Z键没有充分利用,因此将比较常用但不易组词的四码高频字“被”、“使”、“都”设定在Z键,即“被 z”、“使 zz”、“都 zzz” 你们 我们 他们 她们分配到z,比如 你们,只取你的第一码,再加z。 容错码 记住几个特殊容错,对极常用的高频词进行特殊编码,可极大提升效率。 容错码与正常编码同时存在,即使你不使用容错方式输入,对于正常使用没有任何影响。 1.“狐狸 猩猩”等带有反犬旁词组的严重重码词,我们不对左侧反犬进行二字根拆分,而是视为一个字根,再取右侧。 2.“不要 还要”等常用词重码,我们把“还”反拆,即“之”“不”这样拆,就可将这组最常用的重码分开。 3.“问题”极常用,但重码多,带有这二字的四字词也极多重码。因此我们可把“问”里面的“口”象形地改为字母“O”,即可消除重码。 4.“通”组成的词,以“之”充当首码,这样,“交通 不通 通用 不通 通过 通行 通常 通告 通气”等极多的词组也不重码了。 4.常用连词的容错编码。由于连词在句子中没有具体含义,但交通却起到承上启下、连接词组构成句子的作用,因此它们很常见、也很中性和通用。我们把“因为 所以 不但 而且”等最常用的连词,每字取各取1码,再加z。熟练之后,非常流畅! 编辑词库 使用记事本等文本编辑器,打开输入法目录下的 data\wubi86通知.dict.yaml等带有 dict 字样的文件,参照原有内容的格式修改或添加。 编辑扩展词库 使用记事本等文本编辑器,打开输入法目录下的 wubi86.extended.dict.yaml等带有 extended 字样的文件,参照原有内容的格式修改或添加。 词语不需人工编码。注意如果词组中含有一级简码的字,输入时要是一级简码编码,而不能再拆分。比如含有“以”时,编码应当为c,而不是n。 注意:短语中如果存在标点符号则可能无效! 此功能非常适合导入单位的人员名单等,只需把名单一个一行粘贴进去,不需人工编码,然后就能够自动生成编码打字了!单位办公不要太方便! 也可用于维护专业特殊词汇。 添加用户自定义短语 使用记事本等文本编辑器,打开输入法目录下的 data\custom_phrase.txt,参照示例文本进行添加。编码自己随意定义;短语支持标点符号。 获取搜狗最新云词库 运行以下程序: 〈小狼毫五笔拼音输入法所在目录》\data\autoget_sg_dict\get_yunciku_torime.exe 运行后,会在data目录生成luna_pinyin.sougou_network_words.dict.yaml。 用文本编辑器打开这个文件,将里面的词条复制粘贴到你自己的拼音方案即可。 输入法方案注意事项 “五笔86+笔画·单字含生僻字”:专门用于处理生僻字,可五笔编码输入,也可直接以“横h竖s撇p捺n(点d)折z”按笔顺逐个笔画输入。 以下是小狼毫任务导向式参数修改指南: https://mp.csdn.net/console/editor/html/104827624
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

团圆吧

1 分钱,求鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值