docs: 更新 README 反映 v5.1 变更
- 修复 Linux 数据路径说明(XDG_DATA_HOME 优先 + fallback) - UTF-8 安全截取说明 - 新增开发/测试/CI 章节 - 版本历史更新至 v5.1
This commit is contained in:
39
README.md
39
README.md
@@ -2,6 +2,8 @@
|
||||
|
||||
RIME 输入法上下文调频过滤器。根据已上屏的前文自动调整候选词顺序,越用越准。
|
||||
|
||||
[](https://github.com/sakuradairong/rime-context-filter/actions/workflows/ci.yml)
|
||||
|
||||
## 原理
|
||||
|
||||
监听每次上屏内容,自动记录「前文 → 当前选的词」的共现关系。之后遇到同样前文时,将对应的候选词提权置顶。
|
||||
@@ -10,6 +12,8 @@ RIME 输入法上下文调频过滤器。根据已上屏的前文自动调整候
|
||||
- **跨会话**:学习数据持久化到本地文件,重启不丢
|
||||
- **轻量**:热路径无文件 I/O,不卡输入
|
||||
- **跨平台**:自动适配 Windows / macOS / Linux 路径
|
||||
- **安全**:数据文件在沙箱环境中加载,防止恶意代码执行
|
||||
- **自动遗忘**:内置衰减机制,长期不用的搭配逐渐消退
|
||||
|
||||
## 效果
|
||||
|
||||
@@ -77,7 +81,7 @@ context_filter:
|
||||
|
||||
| 参数 | 类型 | 默认值 | 说明 |
|
||||
|---|---|---|---|
|
||||
| `save_interval` | 整数 | 30 | 每 N 次提交写一次磁盘 |
|
||||
| `save_interval` | 整数 | 30 | 每 N 次提交写一次磁盘。可设为 0 强制每次提交都存盘 |
|
||||
| `data_path` | 字符串 | 自动 | 自定义数据文件完整路径。设置后覆盖自动检测结果 |
|
||||
| `decay_enabled` | 布尔 | true | 启用衰减后,旧数据的权重随时间逐渐降低 |
|
||||
| `decay_rate` | 浮点数 | 0.95 | 每次保存时所有计数的乘数因子(0 < rate < 1) |
|
||||
@@ -104,7 +108,7 @@ context_filter:
|
||||
|---|---|
|
||||
| **Windows** | `%APPDATA%\Rime\context_learned.data` |
|
||||
| **macOS** | `~/Library/Rime/context_learned.data` |
|
||||
| **Linux** | `/Library/Rime/context_learned.data`(注:Linux 路径可能随发行版不同,推荐使用 `data_path` 自定义) |
|
||||
| **Linux** | `$XDG_DATA_HOME/rime/context_learned.data`,fallback `~/.local/share/rime/context_learned.data` |
|
||||
|
||||
也可以配置 `data_path` 指定任意路径。
|
||||
|
||||
@@ -122,7 +126,7 @@ return {
|
||||
|
||||
### 安全性
|
||||
|
||||
数据文件在**沙箱环境**中加载。恶意构造的数据文件无法访问 `os`、`io`、`string` 等系统库,仅允许纯数据(表、数字、字符串)返回。兼容 Lua 5.1 / LuaJIT(自动降级为无沙箱模式)。
|
||||
数据文件在**沙箱环境**中加载。恶意构造的数据文件无法访问 `os`、`io`、`string` 等系统库,仅允许纯数据(表、数字、字符串)返回。兼容 Lua 5.1 / LuaJIT(自动降级为无沙箱模式并输出警告)。
|
||||
|
||||
## 工作原理
|
||||
|
||||
@@ -135,13 +139,13 @@ commit_notifier
|
||||
└─ 更新上下文窗口
|
||||
```
|
||||
|
||||
每次录入时,过滤器从当前上下文窗口提取 4 种 key 进行加权查询:
|
||||
每次录入时,过滤器从当前上下文窗口提取 4 种 key 进行加权查询。截取 key 时按 **UTF-8 字符边界**操作,避免中英混输时的乱码问题。
|
||||
|
||||
| Key | 权重 | 示例 |
|
||||
|---|---|---|
|
||||
| 精确前文 | 1.0 | `"接下来的"` |
|
||||
| 末尾 2 字(≥6 字节) | 0.5 | `"来的"`(前文 `"接下来的"` 时) |
|
||||
| 末尾 1 字(≥3 字节) | 0.25 | `"的"` |
|
||||
| 末尾 2 字 | 0.5 | `"来的"`(前文 `"接下来的"` 时) |
|
||||
| 末尾 1 字 | 0.25 | `"的"` |
|
||||
| 双词组合 | 0.4 | `"接下来的任务"` |
|
||||
|
||||
四个 key 的得分加权求和,总分 ≥ 2.0 才参与重排(约 2-3 次选择后生效)。
|
||||
@@ -150,8 +154,31 @@ commit_notifier
|
||||
|
||||
数据以 **Lua 源码格式** 存储。加载时通过 `load()` 由 Lua VM 一次性编译执行,不用逐行 regex 解析。写入使用原子重写(`.tmp` + `rename`),防止文件损坏。
|
||||
|
||||
### 衰减 / 遗忘
|
||||
|
||||
每次保存时对全部计数乘以 `decay_rate`(默认 0.95),计数降至 1.1 以下的条目自动清除。频率越高的搭配保留越久,偶然一次的搭配较快消亡。
|
||||
|
||||
## 开发
|
||||
|
||||
### 运行测试
|
||||
|
||||
需要 Lua 5.3+ 或 LuaJIT:
|
||||
|
||||
```bash
|
||||
lua test_rime_context_filter.lua
|
||||
```
|
||||
|
||||
测试覆盖:评分聚合、序列化/反序列化往返、衰减计算、UTF-8 安全截取、表格复用。
|
||||
|
||||
### CI
|
||||
|
||||
每次推送自动运行:
|
||||
- `luacheck` 静态分析
|
||||
- 跨 Lua 5.3 / LuaJIT / Lua 5.1 三平台单元测试
|
||||
|
||||
## 版本历史
|
||||
|
||||
- **v5.1** — 修复 Linux 数据路径(XDG_DATA_HOME 优先)、UTF-8 按字符截取、Lua 5.3 序列化兼容、scores 表复用减 GC、新增 40 个单元测试 + CI
|
||||
- **v5** — 跨平台路径自动检测、衰减遗忘机制、沙箱安全加载、热路径 GC 优化
|
||||
- **v4** — Lua 源码持久化格式(移除 JSON 依赖)
|
||||
- **v3** — 增量缓冲 + 批量写入
|
||||
|
||||
Reference in New Issue
Block a user