SCWS 即 S imple C hinese W ord S egmentation,是一个中文分词项目,提供了 C API
我写了个简单的 Emacs Dynamic Module 支持它,以方便从 Emacs Lisp 调用:
使用举例:
(scws "简易中文分词系统")
=> ("简易" "中文" "分词" "系统")
(with-temp-buffer
(insert "简易中文分词系统")
(goto-char 5)
(scws-word-at-point))
=> "分词"
5 个赞
如果 Emacs 能直接调用操作系统/Google chrome 的分词接口就好了,不用额外安装。
1 个赞
Google Chrome 的点击取词(中文分词)貌似基于 IBM ICU 实现的:
从这个库提供的功能看起来非常有用,有时间可以看看能不能也为 Emacs 所用。
确实麻烦,或许可以利用现有的包管理器,比如 Homebrew 等,因为安装一个 Emacs module 和一般的程序过程差不多。
不过也说不定, 现在 emacs 26 window版本都集成了它依赖的东西,再集成一个编译器也比较简单。。。。
Emacs 那边只需要头文件 emacs-module.h
,比较麻烦的是安装第三方库(也就是依赖)的问题,比如上面提到的 SCWS 库,这个步骤不好自动化,我觉得安装 SCWS 库比安装 emacs-scws 本身要麻烦,更不用说 SCWS 库自身也有依赖要满足。
总之,如果依赖满足的话,安装一个 Emacs module 应该可以做到像 M-x package-install
那样简单。
将这个模块随 scws 一同发布,也许也是一个办法。
有兴趣搞搞 rime 的 elisp 绑定吗 :-)
LdBeth
2017 年11 月 29 日 00:10
12
Emacs 己有 ibus 的前端了。librime 依賴太多,如果要做 dynamic modules 的话太麻煩。
如果用 dynamic module 实现 https://github.com/rime/librime/tree/master/tools 中 rime_api_console.cc 或者rime_console.cc 的功能,那就好了
gclxry
2018 年10 月 26 日 07:47
14
我是 Chromium ICU库定制裁剪: http://blog.gclxry.com/custom-chromium-icu-library 的作者,我看Google搜索“中文分词”时发现了这个帖子。
如上所述,Google Chrome浏览器的中文分词功能是基于IBM的ICU库实现的,Chromium代码对此有很方便的封装,使用接口很简单:
BreakIterator iter(str, BreakIterator::BREAK_WORD);
if (!iter.Init())
return false;
while (iter.Advance()) {
if (iter.IsWord()) {
// Region [iter.prev(), iter.pos()) contains a word.
VLOG(1) << "word: " << iter.GetString();
}
}
所依赖的分词词典有10MB大小,其中包括日语等语言的分词。如果仅保留中文分词数据,大概可以精简到5MB左右。
7 个赞
SGNH
2019 年9 月 1 日 10:46
17
看你的这个源码当做学dynamic module 的一个小例子了,简单明了,不过为什么在字符串处理时只maollc 了内存没见free啊,不会泄漏吗