惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
aimingoo的专栏
aimingoo的专栏
Microsoft Azure Blog
Microsoft Azure Blog
T
Tailwind CSS Blog
P
Proofpoint News Feed
T
The Blog of Author Tim Ferriss
WordPress大学
WordPress大学
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
I
InfoQ
U
Unit 42
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
Martin Fowler
Martin Fowler
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Security Affairs
Jina AI
Jina AI
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
H
Hacker News: Front Page
MongoDB | Blog
MongoDB | Blog
A
About on SuperTechFans
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
V
V2EX
MyScale Blog
MyScale Blog
V2EX - 技术
V2EX - 技术
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
博客园 - 司徒正美
L
LangChain Blog
F
Fortinet All Blogs
Scott Helme
Scott Helme
量子位
Recent Announcements
Recent Announcements
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
Cloudbric
Cloudbric
W
WeLiveSecurity
The Register - Security
The Register - Security
NISL@THU
NISL@THU
博客园_首页

Dvel's Blog

Rime 全拼双拼混输 CHD 油猴脚本:每日签到自动答题 Rime 配置:雾凇拼音 Hammerspoon 自动切换输入法 修复 Hugo 本地图片的累计布局偏移(CLS)问题 macOS 利用 Karabiner 修改 Emacs 键位为 Vim 键位 macOS 修改 Emacs 键位为 Vim 键位 Surge 配置 汉字的混乱 Netflix 中英双语字幕的好办法 判断字符是否为简体字或繁体字 Cloudflare 转入域名提示「出现了问题。请重试转移此域。尚未向您收费。」 图片压缩:Squoosh、TinyPNG、ImageOptim、WebP macOS grep + sed 批量替换多个文件的内容 在 macOS 根目录创建文件夹 博客图床小妙招 折腾 Hugo & PaperMod 主题 利用 Cloudflare Workers 进行批量 301 重定向 将博客部署在 Cloudflare Pages Alfred File Navigation(文件导航器)详解 在 Hugo Goldmark Markdown 中设置以新标签打开链接 日期与时间(UTC、GMT、时间戳、时区) 让 Alfred 以新标签的方式打开 Finder 用 git filter-branch 给 Git 仓库瘦身 qBittorrent 设置教程 联通光猫破解+桥接记录 配置 Mac 终端走代理 Steam for Mac 中文游戏推荐 我的 Mac 软件/工具列表 《Flask Web 开发》笔记 用 sleepwatcher 让 Mac 在睡眠及唤醒时自动执行一些脚本 解决 pyenv 导致的 brew warning 《SQL 必知必会》笔记 Git 自总结 Python 异步 IO 笔记 再见,双点医院! 用 CloudXNS 解决 CNAME 与 MX 记录冲突 你好,Hugo! 为 Mac 打造 zsh command line 环境 新 Mac 新装修 秦皇岛暑期自驾的烦恼 苹果公司开发者账号申请流程 UIScrollView 中使用 Masonry 解决 CocoaPods 的类库 import 没有提示 iOS 使用 CocoaPods 的快速回顾 GitBook 简单生成本地静态 HTML 的方法 你好, Hexo! About
优化 Rime 英文输入体验
Dvel · 2022-05-12 · via Dvel's Blog

easy_en 方案挂载到自己的主输入方案(全拼、双拼、五笔等),就可以同时输入英文单词。

我用的是 melt_eng 方案,差不多,就是拼写规则的大小写方面改了一点。

引入示例:

schema:
  dependencies:
    - melt_eng

engine:
  translators:
    - table_translator@melt_eng

melt_eng:
  dictionary: melt_eng

这样挂载了英文方案与英文词库,在拼音方案下就可以输入英文单词。

因为不是同一个翻译器,英文不会和拼音共同造词,比如输入「applediannao」,并不会自动生成「Apple电脑」,只能给常用的中英混合词汇单独弄一个词典。

期望的行为:

  • 拼音优先

输入「ma」,前几个候选项应为「吗 嘛 马」,而不是「Mac mad man」。

  • 重码时拼音优先

如「四则」与 size 冲突时,希望「四则」排在第一位

  • 短单词优先

输入 mac,第一候选项应为 Mac,而不是「马车」。

可以降低个别短单词在候选项的位置,在下文。

  • 未输入完全时的英文长单词:

输入 googl,第一候选项应为 Google,而不是「个哦讴歌来」这种无意义的内容。

目前的问题:

目前的问题是这样的,输入完整的短单词权重低,输入不完整的长单词时第一候选项总是一个莫名其妙的中文。

Rime 默认的问题

权重设定

经过多次尝试,最后是给拼音和英文都设置一个权重来搞定的:

# 拼音
translator:
  dictionary: rime_ice
  initial_quality: x

# 英文
melt_eng:
  dictionary: melt_eng
  initial_quality: y

尝试过「不设置:-1」「不设置:0」「不设置:1」「1:0」「2:1」「3:2」「2:1.x」。。。

最后发现一个神奇的比例是 2 > x > y > 1。

使用了 1.2:1.1,各方面都比较合适,有点玄学😂。

期望的行为

重码问题

比如 can you she he size man,既是完整拼音,也是完整单词,在输入过该单词后,会有这样的问题:

重码问题

如果不希望这样,可以直接在词库删掉重码的单词,或永远不输入这个单词,或手动 Fn+Shift+Del 降低权重。

但推荐直接在配置文件中禁用用户词典,因为英文方案不需要造词,自然也就不需要记录到用户词典;没有用户词典,就没有调频。

禁用用户词典还有一个小优点,例如写了这样的固定顺序:

macOS	macOS	999
macOS Sierra	macOS	1
macOS High Sierra	macOS	2
macOS Mojave	macOS	3
macOS Catalina	macOS	4
macOS Big Sur	macOS	5
macOS Monterey	macOS	6
macOS Ventura	macOS	7
macOS Sonoma	macOS	8

那么输入 macos 后,候选项将始终是 macOS 排在第一,接着是最新的系统 macOS SonomamacOS Ventura ……

完整的参考配置

参考配置仓库:iDvel/rime-ice

# rime_ice.schema.yaml

# 自定义短语
custom_phrase:
  dictionary: ""
  user_dict: custom_phrase
  db_class: stabledb
  enable_completion: false
  enable_sentence: false
  initial_quality: 99  # 自定义短语给予高权重

# 拼音翻译器
translator:
  dictionary: rime_ice
  initial_quality: 1.2  # 拼音权重 1.2

# 英文翻译器
melt_eng:
  dictionary: melt_eng
  enable_sentence: false   # 禁止造句
  enable_user_dict: false  # 禁用用户词典
  initial_quality: 1.1     # 英文权重 1.1
  comment_format:          # 自定义提示码
    - xform/.*//           # 清空提示码(就是没有那个小尾巴)

解决副作用

日期时间

拼音的 initial_quality 大于 1 后,日期时间的 Lua 脚本 yield 的候选项会跑到最后面,输入 rq/sj 或 date/time 后,候选项处于最末端,date/time 还好,rq/sj 需要翻好多页。解决方法是在 yield() 前设置一个高权重:

- yield(Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), ""))
+ local cand = Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), "")
+ cand.quality = 100
+ yield(cand)

v 模式

英文的 initial_quality 大于 1 后,方案中的「v 模式」的候选项也跑到最后面了,输入「va」的候选项是「van vain …」,而不是「ā á ǎ à …」,可以通过 Lua 脚本解决。

短单词置顶的问题

一般输入 Mac 时,可能确实想输入这个单词,那么它在第一个候选项就没问题。

但是输入 rug 这种冷门单词时,用户大概率是想输入「如果」。

这种词汇并不多,日常使用也碰不到几个,可以手动处理。

用 Lua 解决了这个问题。(不会 Lua,感谢大佬 @Shewer Lu 指点)

然后在方案文件 xxx.schema.yaml 中可以配置:

# 增加一个 lua_filter
engine:
  filters:
    - lua_filter@*reduce_english_filter

reduce_english_filter:
  idx: 2                   # 降低到第 idx 个位置
  words: [rug, bus, ship]  # 要降低的单词

效果:

改变顺序后的效果

自动大写

autocap_filter.lua 实现,感谢 @abcdefg233 @mirtlecn 的几个 PR。

目前雾凇拼音用的是 20k 小词库,只是方便打一些常见英文,并且纯手动调整了一些大小写。

一般情况输入小写即可得到普通单词的小写形式,和大多数人名、地名、专有名词的大写形式。

通过 autocap_filter.lua 可以再将结果进行大写转换,目前的的行为:

说明 code text
输入小写,得到词库中的原样 latex LaTeX
输入首字母大写,得到首字母大写 Hello Hello
输入前2~n个字母大写,得到全大写 HEllo HELLO
同上,输入全大写,得到全大写 HELLO HELLO

拼写派生

melt_eng.schema.yaml 中修改了大量派生规则,感谢 @mirtlecn 的 PR(#326)。

派生了一些单词的拼写,对于数字同时支持了英文、全拼及双拼的拼音,也支持了部分符号标点:

单词 支持的输入方式
i18n ishiban | ieighteenn
K8s kbas | keights
.NET dotnet
Windows 11 windowsshiyi | windowseleven
Windows 2000 windowsliangqian | windowserqian
windowstwoooo | windowserooo
D&D dandd

对于中英混输词库,所有词条的编码加上了一个特殊符号前缀,防止英文方案拼写派生时派生出全大写字母:

示例:输入 txu 得到「T恤」;输入 Txu 得到「T恤」; 输入 TXU 则只会得到 TXU。