由 @kzf 提议,将 IbEverythingExt 中使用的拼音匹配算法用 Rust 重写成了一个独立的库:
- 支持以下拼音编码方案:
- 简拼(“py”)
- 全拼(“pinyin”)
- 带声调全拼(“pin1yin1”)
- Unicode(“pīnyīn”)
- 智能 ABC 双拼
- 拼音加加双拼
- 微软双拼
- 华宇双拼(紫光双拼)
- 小鹤双拼
- 自然码双拼
- 支持多音字。
- 支持混合匹配多种拼音编码方案,默认匹配简拼和全拼。
- 默认小写字母匹配拼音或字母,大写字母只匹配字母。
- 支持 Unicode 辅助平面汉字。
AutoHotkey v2 用例:
#Include <IbPinyin>
IsMatch := IbPinyin_IsMatch("pysousuoeve", "拼音搜索Everything", IbPinyin_AsciiFirstLetter | IbPinyin_Ascii)
是否匹配 := 拼音_匹配("pysousuoeve", "拼音搜索Everything")
是否匹配 := 拼音_匹配("pysousuoeve", "拼音搜索Everything", 拼音_简拼 | 拼音_全拼)
下载
5 个赞
暂时还没能用的,但因为偶尔会折腾输入法,所以关注 star了
收集了一下其它和拼音有关的项目:
Java 和 TS 都有多编码拼音匹配的库了,.NET 和 Python 似乎还没有。
数据库:
文件管理:
文本编辑:
crows
(crows)
7
有用 rust 实现的 Window 输入法吗?感觉这个库套上个输入法框架就是个很完整的输入法了。
这个库不太适合用来实现输入法,根据拼音遍历查询汉字会比较慢,数据里也没有词频,顶多双拼转换可以复用一下。
Rust 输入法的话有个日语的,不过看起来不支持 Windows:
中文只找到个 demo:
v0.2.1~v0.2.7:
新功能
-
Minimal / C / AHK2:增加 find_match API,允许获取匹配范围(#4)
AHK2 用例:
text := "拼音搜索Everything"
IsMatch := IbPinyin_Match("pysousuoeve", text, IbPinyin_AsciiFirstLetter | IbPinyin_Ascii, &start, &end)
MsgBox(IsMatch ": " start ", " end ", " SubStr(text, start, end - start))
文本 := "拼音搜索Everything"
是否匹配 := 拼音_匹配("pysousuoeve", 文本, 拼音_简拼 | 拼音_全拼, &开始位置, &结束位置)
MsgBox(是否匹配 ": " 开始位置 ", " 结束位置 ", " SubStr(文本, 开始位置, 结束位置 - 开始位置))
-
AHK2:支持 32 位 AutoHotkey
32 位相比 64 位的 DLL 体积小 0.3 MiB(1.5 → 1.2 MiB),进程总内存占用少 0.2 MiB(2.16 → 1.93 MiB)。
改进
修复
- encoding / C / AHK2:修复了对部分 UTF-16 和 UTF-32 字符串不会进行拼音匹配的问题(#2)
- AHK2
- DLL 名称
IbPinyin_IsMatch 在部分情况下会返回错误结果
https://github.com/Chaoses-Ib/IbPinyinLib/releases/tag/v0.2.7
64 位下测试以下语句, 结果为 0. 32位下正常为 1.
msgbox IbPinyin_IsMatch(“wsnbb”, “我是你爸爸”)
是 AHK 库里对返回值的判断有问题,v0.2.7 已修复。
1 个赞