关于Vim&Emacs的中文分词相关讨论

140 views
Skip to first unread message

比尔盖子

unread,
Apr 18, 2012, 9:11:22 AM4/18/12
to vim...@googlegroups.com
关于  Vim&Emacs  的  中文  分词  相关  讨论

在Vim中,基于单词的文本编辑命令是相当有用的。比如使用命令3dw即可删除三个单词。但是在中文中,由于存在相当烦人的分词问题,因此,也就无法实现这样的功能。

但情况远远比这更糟,vi设计之初就遵从的是KISS原则。标点符号和空格分词等,是写死的C代码中的,而Vim也是如此。反观Emacs,则是全部可以使用配置文件进行配置的。正是因为Emacs这种行事风格,也才导致了软件功能膨胀,不过确实提供了神一般的可定制性。

而关于中文分词,我的建议很简单:在Vim读入文件后使用外部工具进行分词,然后反馈给Vim插件,Vim插件检测用户光标的位置,并把cw、dw这样的键映射给插件。如果用户使用dw,那么就根据词语使用d3l来代替dw。

不过这样有一些需要讨论的地方:

1.分词的准确性问题
中文分词一直是一个难题,除了大规模数学统计的方法可以获得较准确的结果外,只能指望今后的人工智能了:( 如果是这样,Vim的分词将不会给用户带来方便,而是烦恼——一些莫名奇妙的词语发生了改变,而不是想要的结果。

2.“大词”和“小词”
拿一个常见的词语来举个例子:发展中国家。这个词语在分词不准确的情况下会分成:发展/中国/家,而在分词准确的情况下则能正确将“中”分出来。但问题是,“发展中国家”单独也成一词。用户在一些情况下可能会希望对“发展中国家”为单位进行操作,但有时仅仅希望删去“发展”一词。如何权衡就是一个很大的问题了。

3.“分词线”
为了避免不可预测的分词结果带来反而难以操作的后果,“分词线”是一个需要实现的功能。即,在每一个分成的汉语词中添加下划线或是斜杠等符号来将词语隔开。但是要在Vim中实现“所见即所得”式的排版效果来显示出“删除线”,恐怕是无法解决的一大问题了,而Emacs可能还好一些。

<B>更新一:可以使用代码高亮的形式表示分词线!</B>

4.真的能实现?
已经有一些Emacs用户在Emacs上实现了简单的中文分词功能。

另外,我对汉语分词技术的一点幻想是“定义词”。假如文章中有这么一句话:“我把它叫做一个‘集合’”,那么分词程序可以根据语义,实时的定义新词。先显然,基本无法实现。另外,我对Vim中中文的折行、不停切换输入法,和不支持中文引号匹配导致前后引号混用的问题也有些意见。显然,Emacs里自带输入法模块,没有此问题。据说VimIM可以解决汉语和vi命令冲突的问题?

欢迎大家对以上问题进行交流。

比尔盖子

Jacky Liu

unread,
Apr 18, 2012, 9:23:05 AM4/18/12
to vim...@googlegroups.com


2012/4/18 比尔盖子 <bierga...@gmail.com>

分词像是文字编辑需要的功能,当然文字编辑也不用 Vim。他们用 Word 时好像也没有分词(有没有?至少我用时没有)

对程序员来讲,还是想想怎么让 Vim 把 “变量_001” 认成一个词比较有用些。眼下 Vim 认为 “变量” 是一个词,“_001” 是另一个词。这个难度也比分词低得多。等这个解决好了,再考虑中文的分词不迟。现在越来越多语言版本支持中文标识名了。



--
http://bluegene8210.is-programmer.com/

依云

unread,
Apr 18, 2012, 9:35:01 AM4/18/12
to vim...@googlegroups.com
On Wed, Apr 18, 2012 at 06:11:22AM -0700, 比尔盖子 wrote:
> [...]

>
> 另外,我对汉语分词技术的一点幻想是“定义词”。假如文章中有这么一句话:“我把它叫做一个‘集合’”,那么分词程序可以根据语义,实时的定义新词。先显然,基本无法实现。另外,我对Vim中中文的折行、不停切换输入法,和不支持中文引号匹配导致前后引号混用的问题也有些意见。显然,Emacs里自带输入法模块,没有此问题。据说VimIM可以解决汉语和vi命令冲突的问题?
>
> 欢迎大家对以上问题进行交流。
>
> 比尔盖子

输入法的话,fcitx 可以通过插件使得在插入模式记住输入法状态,退出插入模式
时自动关闭输入法。中文折行还好,在打了一个补丁之后。引号问题我不太清楚你
说的是什么问题。

对于 Emacs 内建的输入法模块,我不喜欢,就像我只在特殊情况下使用 VimIM 一
样。因为我需要我已经习惯和调教好词库的输入法,它必须是全局的。

实时定义新词的话,得进行语义分析了,而且最好是按文章而不是句子为单位进
行。我只有慢慢等了。

--
Best regards,
lilydjwg

Linux Vim Python 我的博客:
http://lilydjwg.is-programmer.com/
--
A: Because it obfuscates the reading.
Q: Why is top posting so bad?

依云

unread,
Apr 18, 2012, 9:38:48 AM4/18/12
to vim...@googlegroups.com

MS Word、Google Chrome、LibreOffice 都支持中文词。而我对此唯一的反应就是
——不习惯。本来我想双击选中一段汉字的,在那些程序里变成一个真正的词了,而
且还不一定是我想的词(大词vs小词)。

还是想想什么时候 Vim 的正则范围里能写中文吧,最好支持 Unicode 分类。

Yiming Hu

unread,
Apr 18, 2012, 9:39:59 AM4/18/12
to vim...@googlegroups.com
并把cw、dw这样的键映射给插件。如果用户使用dw,那么就根据词语使用d3l来代替dw。

这样的话处理英文文件或者代码怎么办呢?恐怕不能让vim在处理中文时映射,处理英文时不映射吧

Jacky Liu

unread,
Apr 18, 2012, 9:55:16 AM4/18/12
to vim...@googlegroups.com


2012/4/18 Yiming Hu <yimin...@gmail.com>

并把cw、dw这样的键映射给插件。如果用户使用dw,那么就根据词语使用d3l来代替dw。

这样的话处理英文文件或者代码怎么办呢?恐怕不能让vim在处理中文时映射,处理英文时不映射吧

这个应该问题不大。

问题应该在于,用外部插件解决这个问题,原理上就不是那么好,注定了实现上会有很多问题。

比如,按键映射好像不支持模糊定义吧?而跟 word 有关的 motion 理论上有无限多个。怎么办呢?只能拦截所有的按键输入然后分类处理。但是如果你这个插件把按键都给拦截了,别人的插件又要定义按键,怎么办呢?只能看谁先 source 的。想想就头疼。

再加上中文文法的关系,想达到英文那种效果无论如何是不可能的。这真是个蚀本的买卖啊,不如先弄些简单的吧。

--
http://bluegene8210.is-programmer.com/

Tom Li

unread,
Apr 18, 2012, 10:08:26 AM4/18/12
to vim...@googlegroups.com

感谢大家热情的回复,没想到邮件列表威力不小,这是我的第一个邮件列表,而且是今天刚加入的。我现在是用手机回复,若要长篇大论,还需明天讨论。

1.输入法之问题
我也不喜欢内建输入法,但是不停点击Shift实在令人抓狂。我喜欢用iBus,不知道有什么很好的解决方案。有一个曲线救国的办法就是把输入法启用快捷键设置为“Insert”,关闭设为“Escape”,但是有点副作用。另外退出插入模式就关闭输入法这样的办法,也不是很完美,以为在命令模式中还需要用“/某某”来搜索。

2.那个补丁我知道,回头试试。

3.引号的问题就是经常前后引号输入错误。引号自动补全好像是个办法,不知好不好使用Vim script实现。

--
要退订此论坛,请发邮件至 vim-cn+un...@googlegroups.com
更多选项,请通过 http://groups.google.com/group/vim-cn 访问该论坛

AleiPhoenix (A.K.A Areverie)

unread,
Apr 18, 2012, 10:09:05 AM4/18/12
to vim...@googlegroups.com
某想分词的主要需求还是在vim/emacs有快速编辑词语的能力上吧,至少某感觉没看过vim/emacs快速编辑之前都不知道编辑器可以这么用的。

感觉只能等了。。至少某因为这个问题在做翻译的时候会用emacs,写代码则习惯用vim。。

fcitx的问题是某还有需要输入日语的需求(vim下切换输入法还得是多语言是有多蛋疼),所以跑一个fcitx肯定是不够的。。但是又没有哪个拼音输入法比较顺手,现在用自己的mac姬比较多就一直没调教gentoo的输入法。。

2012/4/18 Jacky Liu <bluege...@gmail.com>

--
要退订此论坛,请发邮件至 vim-cn+un...@googlegroups.com
更多选项,请通过 http://groups.google.com/group/vim-cn 访问该论坛



--
Silence is gold.

twitter: @areverie
wikipedia: AleiPhoenix
blog: weblog.areverie.org
wiki: wiki.areverie.org


Tom Li

unread,
Apr 18, 2012, 10:11:35 AM4/18/12
to vim...@googlegroups.com

切换输入法实在抓狂啊,大家交流下Windows/Linux iBus/OS X的经验吧!

Jacky Liu

unread,
Apr 18, 2012, 10:31:07 AM4/18/12
to vim...@googlegroups.com


2012/4/18 Jacky Liu <bluege...@gmail.com>



2012/4/18 Yiming Hu <yimin...@gmail.com>
并把cw、dw这样的键映射给插件。如果用户使用dw,那么就根据词语使用d3l来代替dw。

这样的话处理英文文件或者代码怎么办呢?恐怕不能让vim在处理中文时映射,处理英文时不映射吧

这个应该问题不大。

问题应该在于,用外部插件解决这个问题,原理上就不是那么好,注定了实现上会有很多问题。

比如,按键映射好像不支持模糊定义吧?而跟 word 有关的 motion 理论上有无限多个。怎么办呢?只能拦截所有的按键输入然后分类处理。但是如果你这个插件把按键都给拦截了,别人的插件又要定义按键,怎么办呢?只能看谁先 source 的。想想就头疼。


想岔了,偶不知道怎么“拦截按键”,这个不知道怎么扯出来的 :)

要知道 Vim 的操作跟 Emacs 不一样,这也是 Vim 的特点。不光 3dw 是合法的 word motion,d3w 也是。另外 motion 不光在 Normal 模式下有用,比如先进入 Insert 模式然后再 3w 也可以。

总而言之,不要想去 hack 原有的那些跟 word motion 有关的 Vim 命令了,办不到。想要分词功能,只能自定义新的命令。

--
http://bluegene8210.is-programmer.com/

Tom Li

unread,
Apr 18, 2012, 10:38:36 AM4/18/12
to vim...@googlegroups.com

或者改Vim C代码,但这似乎违反哲学。或者如果真的重构一次也行。

依云

unread,
Apr 18, 2012, 11:14:32 AM4/18/12
to vim...@googlegroups.com
fcitx 已经支持 mozc 了吧,虽然我还不知道怎么用。

On Wed, Apr 18, 2012 at 10:09:05PM +0800, AleiPhoenix (A.K.A Areverie) wrote:
> 某想分词的主要需求还是在vim/emacs有快速编辑词语的能力上吧,至少某感觉没看过vim/emacs快速编辑之前都不知道编辑器可以这么用的。
>
> 感觉只能等了。。至少某因为这个问题在做翻译的时候会用emacs,写代码则习惯用vim。。
>
> fcitx的问题是某还有需要输入日语的需求(vim下切换输入法还得是多语言是有多蛋疼),所以跑一个fcitx肯定是不够的。。但是又没有哪个拼音输入法比较顺手,现在用自己的mac姬比较多就一直没调教gentoo的输入法。。
>
> 2012/4/18 Jacky Liu <bluege...@gmail.com>
>
> >
> >
> > 2012/4/18 Yiming Hu <yimin...@gmail.com>
> >
> >> 并把cw、dw这样的键映射给插件。如果用户使用dw,那么就根据词语使用d3l来代替dw。
> >>
> >> 这样的话处理英文文件或者代码怎么办呢?恐怕不能让vim在处理中文时映射,处理英文时不映射吧
> >>
> >
> > 这个应该问题不大。
> >
> > 问题应该在于,用外部插件解决这个问题,原理上就不是那么好,注定了实现上会有很多问题。
> >
> > 比如,按键映射好像不支持模糊定义吧?而跟 word 有关的 motion
> > 理论上有无限多个。怎么办呢?只能拦截所有的按键输入然后分类处理。但是如果你这个插件把按键都给拦截了,别人的插件又要定义按键,怎么办呢?只能看谁先
> > source 的。想想就头疼。
> >
> > 再加上中文文法的关系,想达到英文那种效果无论如何是不可能的。这真是个蚀本的买卖啊,不如先弄些简单的吧。
> >
> > --
> > http://bluegene8210.is-programmer.com/
>

--

Reply all
Reply to author
Forward
0 new messages