leizongmin / node-segment

基于Node.js的中文分词模块
Other
1.2k stars 132 forks source link

BUG: 被忽略的空格 #8

Open hotoo opened 10 years ago

hotoo commented 10 years ago
console.log(segment.doSegment("a a")); // [ { w: 'a', p: 16 }, { w: 'a', p: 16 } ]
console.log(segment.doSegment("一 一")); // [ { w: '一一', p: 6291456 } ]
leizongmin commented 10 years ago

不好意思,过了这么久才看到

leizongmin commented 10 years ago

建议在分词前使用 split(/\s+/) 来分割

hotoo commented 10 years ago

这个不准备修复了么?

leizongmin commented 10 years ago

1、导致自动把一 一合并的原因是:分词过程中是没有记录空格的,因此一 一的分词结果是['一', '一'],由于默认启用了一个优化功能,把相邻两个数字合并了; 2、如果要修复的话,目前最简单的方法就是分词前使用 split(/\s+/) 来分割一次; 3、如果直接在 segment 模块中修复的话,我需要再考虑一下这个改动是否会对一些现有的程序产生影响。

leizongmin commented 10 years ago

已修复。请使用 v0.0.5 版本

hotoo commented 10 years ago

:+1: 建议仓库打上 tag,用 milestones, release 这些管理起来。

leizongmin commented 10 years ago

OK,已打上标签“v0.0.5” 在 Node.js 上使用,直接用 npm install segment@0.0.5 即可安装指定版本

hotoo commented 10 years ago

还是有问题,建议 Reopen。

0.0.5 版把空白字符当前分词要素,但是最终结果中还是忽略了空白字符本身:

segment.doSegment("a a")
// 输出结果:
[ { w: 'a', p: 16 }, { w: 'a', p: 16 } ]
// 正确结果应该是:
[ { w: 'a', p: 16 }, { w: ' ', p: 16 }, { w: 'a', p: 16 } ]
leizongmin commented 10 years ago

这不是Bug,而是设计的时候分词结果自动去掉了“无用”的空白字符。

不知道是否有必要保留这些空格

hotoo commented 10 years ago

程序处理的时候,空白文本是内容的一部分,不应该被忽略掉。 pinyin 处理时,分词模块忽略空白字符,会导致输出不一致:

han = "a a";
py = pinyin(han);
// 如果分词模块忽略掉空白字符:
py === "aa";
// 正确的应该是。
py === "a a";