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


#21

那我写个基于pymacs版本的吧,看看效果怎样


#22

话说你这个 jrpc 的版本启动時间多少?是用异步处理的?

我发現用 dynamics module 的话加載词典時间有点长。


#23

是异步启动,加载时间我没注意测,测试的时候只有加载词典明显觉得卡。用C应该也可以异步?就是麻烦了


#24

成了成了!


#25

(ejieba-split-words "我特么社保")
;; => ["我特" "么" "社保"]

(ejieba-insert-user-word dict "特么")
;; => t

(ejieba-split-words "我特么社保")
;; => ["我" "特么" "社保"]

因为 cjieba 实現功能有限,用戶新增的词不能保存。不過可以通過编辑字典达成。


#26
-*- mode: compilation; default-directory: "~/gitrepos/emacs-split-chinese-word/" -*-
Compilation started at Thu May 30 12:21:04

make -k 
gcc -Wall -c ejieba.c -I./cjieba -I.
gcc -shared -o ejieba.so ejieba.o -L./cjieba -ljieba -lstdc++ -lm
/usr/bin/ld: ./cjieba/libjieba.a(jieba.o): relocation R_X86_64_PC32 against symbol `_ZSt4cerr@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make: *** [Makefile:10: ejieba.so] Error 1
make: Target 'all' not remade because of errors.

Compilation exited abnormally with code 2 at Thu May 30 12:21:04

我似乎不能编译?


#27

照做加 -fPIC。我其实用的是 clang。和 gcc 行为不一致。


#28

给你提交了个PR,submodule用HTTPS,SSH没法直接初始化


#29

用 emacs 的 make-thread 试了下,没有明显改善。因为还要搞 lock 这种东西干脆不作了。


#30

为什么你的ejieba在插初始化的时候只能接受五个参数 :joy: ,另外可以动态插入词典么


#31

因为用的 C binding 只实现了这么点功能,想要多就重新写 binding。而且这个 C binding 错误处理还直接 call abort() 的,要是加载字典出现什么问题,比如格式不对 Emacs 顺带也崩了

可以在不重新启动 Emacs 不重新载入动态模块前提下重新加载字典。也可以同时存在多组不同字典。因为所谓字典就是个 DAG,jieba 没有实现有效的插入方法(有的话都可以水 paper 了),就是没有动态插入词典这一说法。所以你指的“动态插入词典”是可以的。


#32

我还是用node和py吧 :frowning_face:


#33

Node 版本和 C++ 实际上功能是同样的。我重写 error handling 就不会有 crash 问题。动态类型检查我是实现了的。 实际上动态模组只有 700 多 K,我觉得用 plain text stdio 性能必然受限的,更不要说语言本身就有的 overhead。


#34

修改了下架构,以后可以方便的添加各种分词后端