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


#1

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

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


#2

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


#3

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

用空我看能不能用回py


#4

不能用 dynamic module 做 ffi callback 么?

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


#5

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


#6

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


#7

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


#8

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

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


#9

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


#10

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


#11

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


#12

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


#13

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


#14

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


#15

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

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


#16

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


#17

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


#18

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


#19

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


#20

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