Closed yu-soong closed 3 years ago
WSL 我不太熟,但是你的 rime 是装在哪里的?如果是 rime 在 Windows 里,去直接调用 WSL 编译出来的二进制文件(这个二进制文件应该是在 Linux 里才能运行吧)可行么?
你试试交叉编译到 Windows。或者最直接的办法,在 Windows 下面装 rust 进行编译。
用 rust 编译时遇到了 link.exe
not found 的 error,懒得折腾就用 Python 装的 wordninja。但是还是没有成功,输入连续单词会有窗口闪动,然后输入框无法输入了。
我现在手头没有 windows 的环境进行测试,只能先等等看有没有其它 windows 用户进行反馈。
好。说实话,这个 easy_en 我用的很少。关键是不够智能。不支持模糊匹配,比如我想输入 interesting 每一个字母的顺序都不能错。我曾经用过一个 AutoHotkey 的脚本,输入 inst 也可以匹配到 intersting 。 估计这个在 Rime 中很难实现。
输入 inst 也可以匹配到 intersting
不加空格的 fuzzy 匹配的准确度相当低,相当于这个正则 ".*?i.*?n.*?s.*?t.*?"
,会匹配到你不想要的单词。一般的做法是用空格表示哪里需要模糊,比如 i[空格]nst
相当于 ".*?i.*?nst.*?"
,这样准确率就会提高。
在 Rime 中很难实现
用 lua 搞也能实现,不过这么做就是相当于完全绕开 rime 自己的查询词典了。
嗯,看起来,加空格确实可以提高准确度,但是,空格键经常是作为第 1 候选词的选择键,所以加空格可能会影响输入的流畅度?其实不加空格的 fuzzy 匹配也可以很快的 一次没匹配 再敲一个字母就行。不管怎样, 如果可以实现还蛮期待的。Rime 对英语输入的支持很差,所以绕开了也无所谓,只要整合在一起就行了 😂
我之前用 AutoHotkey 可以实现(不加空格 fuzzy 匹配,估计加空格也可以),但做的不好的地方就是输入法的候选窗在某些应用比如 Chrome 里不跟随当前输入位置的光标,而是跟随鼠标的位置,影响体验。且没有和 Rime 整合,需要另开 (当然这个也不是特别大的问题)
如果可以实现还蛮期待的
还是要调用一个外部的 rust 程序哦 😂
不需要调用一个外部的 rust 程序员就行,😂
win10上确实有问题,闪一下黑窗,然后输入框就刷没了。rust不懂,通过ENV进行高频数据交换,还是比较卡的。后来找了个C++写的分词类,down下来librime-lua,整合进去,编译rime.dll,替换小狼毫自带的,在lua里面只接调用C函数分词,终于不出黑窗了。如何和中文混输时候进行连输?主页上输入法显示彩色灯泡,为啥我这里显示黑白灯泡☹
@cnlog 厉害了 👏🏻,你这个方案会放到 GitHub 上吗?有空我学习一下。还有,这个方案支持 fuzzy 匹配吗?(这个可以有😂)
你显示黑白灯泡,可能是字体的问题?我虽然没成功,但某次看到一个黄色的灯泡一闪而过。
https://github.com/cnlog/warehouse
自己编译的话.env.bat中
set CMAKE_GENERATOR="Visual Studio 16 2019" -A Win32
换成你的vs版本
替换原来的rime.dll,注意备份。退出算法服务,复制dll后再启动算法服务。把wordninja_words.txt放到用户目录,和rime.lua同一目录。修改easy_en.lua, local function split_sentence_wordninja_rs(sentence, wordninja_rs_path) --return capture(wordninja_rs_path .. " -n " .. sentence) --调用l_word_split函数分词 local result = l_word_split(0,sentence) return result end
没有 vs,只有 VS Code 😂
发现一个有趣的英文输入法,用 lua 实现的:https://github.com/sdadonkey/rime-english 希望对各位有所启发 🤭
@yu-soong easy-en 的重点是提供基本的单词和句子输入,不会考虑单词释义等功能,今后的目标是优化长句输入体验。
rime-english 更像是英文单词词典,对于学习使用更有帮助。
两者侧重点不同,用户可以根据需要搭配使用。😘
@BlindingDark 对的,我也不需要单词释义,所以用他那个方案,我自己手动把能去的释义都去掉了。
目前那个方案的优点是: -不需要用 wordninja, 因为目前 wordninja 貌似在 Windows 10上面有 bug,至少我现在用 Rust 和 Python 装的都用不了;他这个应该是用的 Lua 速度也挺快的。 -支持通配符 fuzzy 匹配;空格键输入单词会自动插入空格(目前用数字键选词没有空格,不知道是不是 bug)。
缺点是好像不支持短语,只能是单个单词。
我觉得这两个方案结合起来可能就完美了😂
@yu-soong 我本人不在 Windows 下使用 rime,所以没有暂时测试 Windows 下的兼容情况。不过下阶段有计划提供 Windows 平台的二进制文件,到时直接下载使用即可。 单个单词的模糊匹配也有在计划中,不过整句的模糊输入还没有想到什么好的方案。
@BlindingDark
下阶段有计划提供 Windows 平台的二进制文件,到时直接下载使用即可。
期待👏
整句的模糊输入
我觉得可以将常用的短语放进 dict 里面去。就是不知道可不可以将短语当作普通的单词看待。另外那个方案对符号支持比较友好,输入逗号句号,直接在单词后面添加符号,不会产生不必要的空格。供您参考。
将常用的短语放进 dict 里面去
词典中已经有部分短语了
不会产生不必要的空格
这个之前有讨论过
easy-en 的做法是,不需要用户手动输入空格,程序自动会在每个单词后面加空格,不过 rime 不能删除已经加上的空格,所以我目前没找到一个好办法可以在输入标点后将前面的空格删除,如果有的话那就完美了。 rime-english 的做法是,每个标点和空格需要用户手动输入,只不过是附带触发单词上屏,这样是可以根据情况来选择要不要加空格。
举例,输入 I love rime.
easy-en 的键盘按键顺序:Iloverime[删除空格][句号] rime-english 的键盘按键顺序:I[空格]love[空格]rime[句号]
嗯,这是个输入习惯偏好问题。rime-english 更接近于我们平常的英语输入习惯,但是 easy-en 习惯后估计会更流畅(毕竟少打不少空格😝)。
现在用起来的感觉,更像是连续输入增强在windows下的实现方式可能不太行。
我两种都试了,感觉两种连续输入增强都是调用外部程序失败的那种感觉。
连续输入之后,想要它进行空格补充的时候,都会有一个程序被调用,rust版本的时候是一个没有任务栏图标的东西,弹出然后就消失;然后就会卡在原来的位置,再因为小狼毫的问题,窗口会被隐藏;之后再继续输入的时候,就会卡住;然后rime被暂时挂起,直到调用到切换输入方案的菜单的时候。
而在python的那个的情况下直接是一个巨大的cmd窗口弹出,然后消失,然后直接rime挂起。
不过现在关掉之后用起来还是很爽的(除了词库比较细碎 和 模糊好像还是怪怪的以外,比rime-english那样直接占用中英输入要爽很多很多
@H-111-di 看来 windows 下确实不能这么直接调用,我再尝试下别的方案
开发大大辛苦了🙏🏻
@yu-soong
Windows 版本的 exe 文件,点击下载 https://github.com/BlindingDark/wordninja-rs/releases/download/latest/wordninja.exe
也可以去我的仓库的 Release/Assets 找到编译好的 Linux, MacOS 以及 Windows 版本的 wordninjia-rs https://github.com/BlindingDark/wordninja-rs/releases
谢谢 @BlindingDark 我刚才试了一下,还是没有成功。 以下是我的配置过程:
不知道我以上的步骤有没有错误的地方?
@yu-soong 大概发现问题了,在尝试解决
👍
@yu-soong 问题比较复杂
首先是路径问题,Windows 配置路径如果使用 \
,则需要两次转义也就是写四个 \\\\
,所以推荐用 /
作为路径分隔符,也就是 C:/Users/myname/Downloads/wordninja.exe
然后是权限问题,rime lua 只能读取到 rime 用户配置文件夹下的文件,所以放在 download 路径下的文件是读取不到的,所以路径应该放到 C:/Users/username/AppData/Roaming/Rime/wordninja.exe
这样放好之后,虽然不报错了,但是在大部分输入框里都没办法正常工作,只有在极个别的一些窗口,比如文件管理器的搜索栏里可以使用。打字的时候你会发现会有一个黑框闪过去,这个楼上很多人已经提过了,就是这个黑框导致输入焦点丢失,无法正常使用。这个是 lua windows 实现的一个问题,一定会弹 cmd 窗口,我现在在想办法绕过去,比较麻烦。
AM 4:00 成功了,今天搞的比较晚了,明天整理解决方案
@BlindingDark 期待 🤞
@yu-soong 下面这个方案仅作为测试使用
C:/Users/username/AppData/Roaming/Rime/wordninja.exe
,注意是 /
斜杠修改 easy_en.lua,将开头的 capture 函数,也就是开头的 6 行,替换为下面的代码
require "winapi"
local function capture(cmd)
code, s = winapi.execute(cmd)
return s
end
上面的方案我自己试了一下,性能不是很理想,步骤也过于繁琐了,接下来我会仿照 @cnlog 的方案,把 rust 程序打包成 dll/so,这样所有平台都能受益,速度应该也会提升。
我试了一下,不行。连候选词都没有了,如图: 我等你更成熟的方法吧。你慢慢来🤭
@cnlog @H-111-di @yu-soong
适用于 Windows 系统的更新来了 🎉 参照 README https://github.com/BlindingDark/rime-easy-en#lua-native-module 只需要
patch:
easy_en/use_wordninja_rs_lua_module: true
easy_en/wordninja_rs_lua_module_path: "C:/SOME/PATH/wordninja.dll"
欢迎反馈
@BlindingDark 不知道是不是我电脑的原因,按照这个方法还是没有成功,依然闪屏。
但是我按照 @cnlog 的方法成功了。但是他这个也有小 bug,就是有时会打出两个空格。并且不支持撇号(')比如 it's, that's 等打不了,只能打its 然后在候选框了选 it's.
如果愿意的话,建议可以考虑合并过来。然后对比一下看哪个速度更快一些。
依然闪屏
理论上是不可能的,这个方案从头到尾就没有调用过外部程序,可以把你的完整配置发来么?
你说的闪屏是什么现象?可以分词但是有窗口弹出来闪一下,还是输入闪一下但是没分词,还是一点候选也没有只闪屏?
以及你的 rime 是从哪里下载的?官网上默认是 32 位程序。
@yu-soong 最近你有空的话可以给你远程控制看看问题。你有什么联系方式么?
@BlindingDark 不好意思,我刚刚认真的检查了一下。原来是我的 easy_en.lua 文件有了改动(或者是你做了什么改动?) 总之,覆盖成你的,就可以使用了。十分感谢!
(或者是你做了什么改动?)
是的,最新(0.9)版本的 lua 脚本是升级了的。
既然问题已经解决,我就先关闭这个 issue 了。 有什么新的意见和建议欢迎提新的 issue 😘。
我用的是Windows 10,步骤如下:
bash rime-install BlindingDark/rime-easy-en
安装 easy_en;git clone --depth=1 https://github.com/chengyuhui/wordninja-rs
cargo build --release
部署 wordninja 在 某文件夹下综上,我觉得我的 wordninja 可能没有安装成功,但是不知道问题出在哪。谢谢。