banner
虫子游戈

虫子游戈

一个写故事的人类
mastodon
email

特定の繁体字の単語をRime入力法の候補に追加する方法

私は以前、Rime 入力法が簡繁混合入力をサポートするようにすることに成功しました。しかし、実際に使用してみると、単に煩わしさが増すだけで、元々慣れていた順序が乱れ、入力の時間と労力コストが大幅に増加するため、入力法は再び純粋な簡体字バージョンに戻りました。

しかし最近、仕事の関係で「昇」という特定の繁体字を入力する必要があり、簡体字バージョンの Rime ではこの字を直接入力することができませんでした ——「昇」をカスタム辞書に追加しても実現できませんでした。

2 晩研究した結果、Claude の助けを借りて解決策を見つけました。

実際、Claude はいくつかの解決策を提示しましたが、実際に試した結果、現在機能するのはこの一つだけです。

この解決策は Lua スクリプトに基づいています。

第一歩として、ユーザーフォルダ/Luaに新しい Lua スクリプトを作成します。例えば、namex.luaという名前にします。スクリプトの内容は以下の通りです:

-- 特殊文字処理
local special_chars = {
  ["升"] = "昇",
  ["龙"] = "龍"
  -- さらに特殊な単字対を追加できます
}

-- 特殊語句処理
local special_words = {
  ["升腾"] = "昇腾"
  -- さらに特殊な語句対を追加できます
}

local function filter(input, env)
  -- すでに処理された特殊文字を記録
  local handled = {}
  
  -- 第一回:すべての候補を正常に出力し、特殊文字/語句にマークを付ける
  for cand in input:iter() do
    yield(cand)
    
    -- 単字をチェック
    if special_chars[cand.text] then
      handled[cand.text] = true
      
      -- 特殊文字が見つかった場合、すぐに対応する繁体字を後ろに追加
      if not handled[special_chars[cand.text]] then
        local fan_text = special_chars[cand.text]
        local new_cand = Candidate("char", cand.start, cand._end, fan_text, "")
        new_cand.quality = cand.quality - 1  -- 重みを少し下げる
        yield(new_cand)
        handled[fan_text] = true
      end
    end
    
    -- 語句をチェック
    if special_words[cand.text] then
      handled[cand.text] = true
      
      -- 特殊語句が見つかった場合、すぐに対応する繁体語句を後ろに追加
      if not handled[special_words[cand.text]] then
        local fan_text = special_words[cand.text]
        local new_cand = Candidate("word", cand.start, cand._end, fan_text, "")
        new_cand.quality = cand.quality - 1  -- 重みを少し下げる
        yield(new_cand)
        handled[fan_text] = true
      end
    end
  end
end

return filter

繁体字や語句を追加したい場合は、上記の対応する位置に補充できます。

または、こちらのより簡単なスクリプトを使用することもできます:

-- 特殊文字処理
local special_pairs = {
  ["升"] = "昇"
  -- さらに特殊文字対を追加できます
}

local function filter(input, env)
  -- すでに処理された特殊文字を記録
  local handled = {}
  
  -- 第一回:すべての候補を正常に出力し、特殊文字にマークを付ける
  for cand in input:iter() do
    yield(cand)
    
    -- 特殊文字対が存在するかチェック
    if special_pairs[cand.text] then
      handled[cand.text] = true
    elseif special_pairs[cand.text] then
      handled[cand.text] = true
    end
    
    -- 特殊文字が見つかった場合、すぐに対応する繁体/簡体文字を後ろに追加
    if special_pairs[cand.text] and not handled[special_pairs[cand.text]] then
      local fan_text = special_pairs[cand.text]
      local comment = "繁体"
      local new_cand = Candidate("char", cand.start, cand._end, fan_text, comment)
      new_cand.quality = cand.quality - 1  -- 重みを少し下げる
      yield(new_cand)
      handled[fan_text] = true
    end
  end
end

return filter

第二歩として、rime.luaファイルに新しい行を追加します:

namex_filter = require("namex")

第三歩として、あなたの入力方案.custom.yamlファイルに新しい行を追加します:

engine/+:
  filters/+:
    - lua_filter@namex_filter

完了です。再デプロイすれば OK です。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。