jieba.el -- 在Emacs中使用jieba中文分词

前一阵子在Emacs CN Telegram讨论群组里听见有人在讨论Emacs内部的中文分词相关问题,于是花几天时间了这个小插件,基于nodejieba的分词系统在Emacs里使用中文分词功能。

screenshot

妈妈再也不用担心我Emacs里处理中文文本没有分词体验不好啦 :rofl: :rofl:

11 个赞

几乎无法用npm在mac上安装成功任何东西。。。

1 个赞

原计划是用py的,但是没搞会py的stdio机制 (强制缩进语法写得我脑袋疼) ,就改用node实现了 :joy:

用空我看能不能用回py

不能用 dynamic module 做 ffi callback 么?

亲測可用,不過我不会 python:

结巴分词有 C++ 版本的,没有 C 版本的,不清楚能不能写成 dynamic module。

1 个赞

有机会试试 Python 来写,不了解怎么写 Daemon、Server,要跟 Emacs 双向通信,是像你那样死循环读写 STDIN、STDOUT、还是有别的思路(HTTP 服务器之类的),不知道有没有思路和经验?

可以,就是 C++ 编译起来比较麻烦

其实 Emacs 和 Python 已经有现成的 RPC 通信协议,可以互相调用程序。

https://python-epc.readthedocs.io/en/latest/

也有C版本的 https://github.com/yanyiwu/cjieba

1 个赞

我试过用socket编程来写,不过要同时维护socket process和python process(Emacs里把socket链接和process都当作process来处理)比较麻烦,就用了stdio的方法

1 个赞

封装成 HTTP API,然后 Emacs 端用 url.el 会不会比 stdio 慢上不少?(感觉是的,考虑到 Emacs 每次都要构建新请求,应该也就是你提到的 subprocess)

我的意思是用socket直接交换json数据,不是启动http服务器,Emacs连接到一个端口是用open-network-stream, 然后可以用process-send-string向那个端口发送数据

嗯,我的意思是 url.el 每一个请求都需要创建和销毁一个 subprocess,这应该会比较慢。我没理解错你的意思,我前面的表述不清楚。

看起来也是用socket通信,而且这个包似乎太老了

真巧,今天刚想到写这个东西,上网搜了一下发现刚好写出来了

可以考虑用 PyMacs? 虽然作者已经过世了,但package还是比较稳定,ropemacs也是基于这个来做代码重构

目前想先搞dynamic module的 :blush: py的可能会放一放

你在写了嗎?不着急的话我先写 dynamic module 去了。

其实我想用chicken scheme写,不知行不行得通 :stuck_out_tongue:

那就多出來个 chicken 的 runtime,沒必要。

那你可以先写上,我主要是想玩玩chicken