Repository navigation
Replies: 4 comments 5 replies
|
提供一個簡單的思路: 目前已有一個 moran_reverse 方案構建了純單字的詞典和 prism。所以可以添加一個 translator 得到純單字輸出,然後給它一個較大的 initial_quality ,使其總是出現在默認結果之前: patch:
engine/translators/+: [table_translator@single_char]
single_char:
dictionary: moran.chars
prism: moran.chars
initial_quality: 10
enable_user_dict: false這裏的 10 是試出來的,可以使得這些單字輸出排在固定簡碼之後、詞語和句子之前,根據你的需要,設到更大的值還可以排在簡碼之前。 要輸入詞語,可以按額外按
因爲需要增設翻譯器,可能不太方便做成動態開關,但可以做成一個額外方案,用快捷鍵切換。 |
2 replies
3 replies
|
經提醒簡化代碼。方便後來者: # file moran_qfxd.schema.yaml
# via https://github.com/rimeinn/rime-moran/discussions/214
# credit ksqsf, sol
#
__include: moran.schema:/
schema:
schema_id: moran_qfxd
name: 魔然·全輔先單
dependencies:
- moran
__patch:
# ⇩﹝ksqsf﹞ 目前已有一個 `moran_reverse` 方案構建了純單字的詞典和 `prism`。所以可以添加一個 `translator` 得到純單字輸出,然後給它一個較大的 `initial_quality`,使其總是出現在默認結果之前。
engine/translators/+: [table_translator@single_char]
# ⇧﹝ksqsf﹞注:要輸入詞語,可以額外按 `'` 鍵。﹝sol﹞或額外附加詞輔碼,令其逸出四碼外。
single_char:
dictionary: moran.chars
prism: moran.chars
initial_quality: 10
# ⇧﹝ksqsf﹞ 這裏的 `10` 是試出來的,可以使得這些單字輸出排在固定簡碼之後、詞語和句子之前,根據你的需要,設到更大的值還可以排在簡碼之前。
enable_user_dict: false |
0 replies
|
實現開關「全輔先單」。有始有終,作個記錄。 一、水面之下:
二、完整實現: # 對 moran.schema.yaml 執行
patch:
switches/+:
# 「全輔先詞、全輔先單」開關。
- name: qfxd
states: [ 全輔先詞, 全輔先單 ]
key_binder/custom_bindings/+:
- { when: has_menu, accept: Control+d, toggle: qfxd }
# 碼表:單字
# 用於「全輔先單」開關,在 moran_express_translator 中被調用
single_char:
dictionary: moran.chars
prism: moran.chars
initial_quality: 10
enable_user_dict: true-- file lua/moran_express_translator.lua
function top.init(env)
env.fixed = Component.Translator(env.engine, "", "table_translator@fixed")
-- ⇧ #sol 固有詞表,對應 moran_fixed.dict
env.smart = Component.Translator(env.engine, "", "script_translator@translator")
-- ⇧ #sol 擴展詞表,對應 moran_extended.dict(複合詞典,包含 moran.chars.dict 等)
env.tr_single = Component.Translator(env.engine, "", "script_translator@single_char")
-- ⇧ #sol @2026-04-26 單字詞表,對應 moran_chars.dict(用於將四碼所匹配單字置頂)
-- ❗️注:該譯碼器類型應選擇 `script_translator` 而非 `table_translator`,否則將無法與 `env.smart` 同步動態調頻,卽便已開啓 `enable_user_dict` 選項。該結果由實測而來,原因不明,可能與主輔碼分隔符有關。
-- ⋯⋯ 下略
end
function top.func(input, seg, env)
top.output_begin(env)
-- 每 10% 的翻譯觸發一次 GC
if math.random() < 0.1 then
collectgarbage()
end
local input_len = utf8.len(input)
-- #sol @2026-04-26 新增並應用「全輔先單」開關。
-- #sol 若編碼長度爲四(全輔碼)且「全輔先單」開關生效:輸出單字,使其總是在所有結果之前。
-- #sol 後續所有重複輸出,將會被 uniquifier 自動濾除。
-- #sol 有替代實現方案,卽採取與「出簡讓全」相似策略,作後處理。可降低性能損耗,但邏輯複雜。
-- #sol 若希望簡碼在前,可將此節調至 fixed 輸出之後。
qfxd = env.engine.context:get_option("qfxd")
if input_len == 4 and qfxd then
local single_res = env.tr_single:query(input, seg)
if single_res ~= nil then
for cand in single_res:iter() do
-- cand.comment = '❗' -- ⇦ DEBUG
top.output(env, cand)
end
end
end
-- ⋯⋯ 下略
end |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment




Uh oh!
There was an error while loading. Please reload this page.
誠心發問,不作伸手黨。瞭解 lua,不瞭解字詞輸出細節。
魔然默認方案中,四碼詞語優先;但在古文/僻字輸入場景中,以打單爲主、打詞爲輔。此時希望四碼優先出單,而不需要附加
/或o再出單⸺可通過模式切換配合 express_translator 實現,卽標題所提出的「四碼」「單字優先/詞語優先」開關。同時/或o在「單字優先」生效時可反轉爲「僅出詞」。原有附加
/或o的解決方案有兩個小問題:(1)輕微破壞節奏、降速;(2)部分四碼無詞,部分四碼有詞,需目視確認。仍在用老版 trad-v301。查看 trad-v320 相關 schme/lua 文件,存在新選項
inject_prioritize: "any|char|word",但基本確定是在「次選」上做文章,而與「首選」無關。瞭解實現細節的朋友,能否提供一些思路或代碼關鍵字?
All reactions