Skip to content

whyb/PinYinIME

Repository files navigation

极简拼音输入法 (PinyinIME)

为什么会有这个项目

受够了搜狗输入法。

弹窗广告铺天盖地,关都关不掉——关闭按钮小得跟蚂蚁似的,点歪了直接弹出一整个浏览器窗口。这还不算完,用着用着发现电脑上莫名其妙多了一堆根本没装过的软件:XX壁纸、XX浏览器、XX安全卫士……我保证不是我装的,我绝对没有点过任何"安装"按钮。搜狗在后台一声不吭就给你塞进来,跟小偷没什么两样。

这种流氓行径必须谴责。一个输入法而已,凭什么监听你的键盘、扫描你的硬盘、把你的输入习惯上传到它们服务器?凭什么弹广告、装全家桶?

于是就有了这个项目——一个极简的拼音输入法,开源,不需要联网,隐私完全可控。没有广告,没有后台,没有全家桶,更没有藏在角落里的"推荐安装"。核心代码一千行出头,无任何第三方库依赖,干净透明,每一行都看得见。

功能上也没含糊:支持全拼/简拼、模糊音(z/zh、c/ch、s/sh、n/l、f/h、en/eng、in/ing)、繁简体一键切换(2000+ 字符映射 + 词汇级消歧 + 两岸 IT 术语差异)、用户自定义词库、词频自动学习、DP 拼音分割(输入 haiyoumeiyou 自动拆成「还有没有」)、多皮肤配色、候选词数量可调……该有的都有。

一句话:我的输入法,我做主。

使用实录

gif

特性

🚫 反流氓

  • 零联网: 不联网、不上传、不收集隐私
  • 零广告: 没有弹窗,没有推广,永远不会有
  • 零捆绑: 不安装任何第三方软件
  • 代码可审计: 开源,核心代码一千余行,每个人都能看

🎯 核心输入

  • 全拼 / 简拼: 支持完整拼音和首字母缩写(nh → 你好)
  • DP 拼音分割: 输入长串拼音自动拆成词组(haiyoumeiyou → 还有没有)
  • 内置词库: 基于 rime-ice 词典,46,000+ 单字,540,000+ 词组,480,000+ 简拼
  • 用户词库: 自学习,自动记录选词频率,越用越顺手
  • 词频动态调整: 每次选择自动 +1 频率,下次优先显示

🎨 外观

  • 预设皮肤: 6 款配色(默认浅灰、简约白、深邃黑、护眼绿、暖米黄、清爽蓝)
  • 自定义配色: 通过取色器自由选择主色调,自动生成整套配色
  • 候选词数量: 5-9 个可调
  • 字体大小: 12-36px 可调
  • 横排 / 竖排: 候选框自由切换
  • 微软雅黑: 设置界面统一使用微软雅黑字体

🔧 高级功能

  • 模糊音: 支持 7 组模糊音(z/zh、c/ch、s/sh、n/l、f/h、en/eng、in/ing)
  • 繁简体转换: 2000+ 字符映射 + 180 词汇级消歧 + 40 两岸 IT 术语
    • 一简对多繁智能消歧(如「发」→「發/髮」、「后」→「後/后」)
    • 最长词匹配优先策略
  • 智能拼音纠错: 自动识别常见拼写错误
  • 中文标点: 自动转换 ,。!?——「」
  • 设置窗口: 纯 Win32 手写 UI,无资源文件依赖
  • 用户词典管理: 可视化增删改查

🖥️ 技术亮点

  • UIAutomation 光标检测: 精准定位文本输入光标,候选框绝不挡字
  • PageUp / PageDown 翻页: 除了 -/=,也支持 PageUp/PageDown
  • ⚙ 设置按钮: 候选框上可直接点击齿轮图标打开设置

编译

环境要求

  • Windows 7+
  • Visual Studio 2012+

方式一:CMake

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release
cd build && PinyinIME.exe

方式二:build.bat

VS2012 Developer Command Prompt 中:

cd D:\codes\github\InputMethod
build.bat

编译产出一个 PinyinIME.exe,静态链接 CRT,无需安装任何运行时,拷贝到哪跑到哪。


使用方法

  1. 运行 PinyinIME.exe
  2. 右 Shift 切换中英文模式
  3. 中文模式下输入拼音:
    • 空格 确认第一个候选
    • 数字 1-9 选择对应候选
    • - /PageUp / PageDown 翻页
    • Backspace 删除最后一个字母
    • Escape 清空输入
    • 点击 图标打开设置
  4. 再按 右 Shift 切回英文模式

文件说明

文件 行数 说明
main.cpp ~1180 主程序:键盘钩子、拼音引擎、候选窗口、文本注入、UIA 光标检测、拼音分割
settings.h ~870 设置系统:设置窗口 UI、皮肤管理、用户词典对话框
s2t_data.h ~810 简繁转换:2000+ 字符映射 + 词汇消歧 + 两岸 IT 术语
dictionary.h ~80 词库加载器:从 TSV 文件加载单字 + 词组 + 简拼
CMakeLists.txt ~85 CMake 构建脚本
build.bat ~40 一键编译脚本
convert_rime_dicts.py - Python 词典转换脚本:从 rime-ice 词库生成 PinyinIME 格式
rime-ice/ - rime-ice 词库(git submodule)
user.dict - 用户自学习词库(运行时自动生成)

技术架构

┌───────────────────────────────────────────────────┐
│  WinMain (消息循环)                                 │
│  ┌──────────────┐  ┌──────────────┐               │
│  │ KeyboardHook │  │ CandidateWin │               │
│  │ WH_KEYBOARD_LL│  │ WS_POPUP    │               │
│  │ + 键盘映射    │  │ + GDI 自绘   │               │
│  └──────┬───────┘  └──────▲───────┘               │
│         │                 │                        │
│  ┌──────▼──────────┐  ┌──┴──────────────────┐     │
│  │ PinyinEngine    │  │ IUIAutomation       │     │
│  │ + 410音节       │  │ + TextPattern2      │     │
│  │ + DP分词        │  │ + GetCaretRange     │     │
│  │ + 模糊音        │  │ → 精准光标定位       │     │
│  │ + 词频学习      │  └─────────────────────┘     │
│  │ + 简繁转换      │                              │
│  └─────────────────┘                              │
│  ┌──────────────────┐                             │
│  │ SettingsWindow   │                             │
│  │ + 皮肤/配色      │                             │
│  │ + 用户词典管理    │                             │
│  └──────────────────┘                             │
└───────────────────────────────────────────────────┘

简繁转换

基于《简化字总表》三表体系:

  • 表一 (~350 字):不作简化偏旁的简化字
  • 表二 (~132 字 + 14 简化偏旁):可作简化偏旁的简化字
  • 表三 (类推简化,1500+ 字):应用表二偏旁类推简化

转换策略:最长词匹配优先 → 单字映射回退,确保「一简对多繁」正确消歧。

词汇覆盖:

  • 一简对多繁词组消歧 ~180 对(如 出发→出發 / 头发→頭髮)
  • 两岸 IT 词汇差异 ~40 对(如 软件→軟體、鼠标→滑鼠、服务器→伺服器)

自学习机制

每次选择候选时:

  1. 该候选在用户词库中频率 +1
  2. 自动保存到 user.dict 文件
  3. 下次输入相同拼音时,高频词优先显示
  4. 候选排序 = 系统词库基础频率 + 用户学习频率

注意事项

  • 全局键盘钩子(WH_KEYBOARD_LL)需以管理员权限运行,否则在某些应用中无法正常输入
  • 候选框使用 GDI 纯手工绘制,无任何 UI 框架依赖,无任何第三方库依赖
  • 首次运行会在同目录生成 pinyin_config.ini(配置文件)和 user.dict(用户词库)
  • UIAutomation 光标检测在 Chrome/Edge/VSCode/Office 等现代应用中工作良好,老旧程序回退到 Win32/MSAA 检测

许可证

MIT License

About

不超过1000行的极简拼音输入法实现

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages