nodejieba icon indicating copy to clipboard operation
nodejieba copied to clipboard

期望更细致的切分结果

Open hotoo opened this issue 10 years ago • 20 comments

对于拼音来说,细致的切分出所有成语、词语,比切分出短语更合适。例如 README 中的示例:

nodejieba.cut("南京市长江大桥");
// 目前:["南京市","长江大桥"]
// 期望:["南京", "市","长江", "大桥"]
// 亦可:["南京市","长江", "大桥"]


nodejieba.cut("南京长江大桥");
// 目前:["南京长江大桥"]
// 期望:["南京","长江", "大桥"]

如果是目前的结果,则拼音的词语库中需要保留各种短语(例如 九江长江大桥、武汉长江大桥 等)。

如果是期望的结果,则只需要保留成语、词语的拼音库即可(更进一步,只需要保留有多音字的成语、词语拼音库)。

hotoo avatar Jun 16 '15 02:06 hotoo

我能理解你的需求。 不过有一个切词模式(搜索引擎模式:QUERY)和你的需求相近, nodejieba.cut("南京市长江大桥", "QUERY");

原理是当词的长度大于一个阈值的时候,会对它进行细的切分。 比如当阈值设置为3(现在本项目的默认阈值是4)的时候, "南京市长江大桥" 会被切分成 ["南京市","长江","长江大桥","大桥"]

不知道这种分词模式是否符合你的需求。

PS: 之后关于各种切词模式的文档会跟上。

yanyiwu avatar Jun 16 '15 03:06 yanyiwu

  1. 结果中有重复出现词语,这个不是期望的,也不好处理。
  2. 期望的结果是以成语、词语、短语这个顺序为优先级进行切分。
    1. 是成语的以整个成语为一个词(成语一般 4 个字);
    2. 是词语的以整个词语为一个词(词语一般 2 个字);
    3. 是短语的以整个短语为一个词(短语一般是地名、人名、物名等,但是最好是可以选择长模式还是短模式,对于拼音来说,应该期望是短模式)。

hotoo avatar Jun 16 '15 03:06 hotoo

就类似下边的demo,使用搜索分词,NLPIR能够把香港特别行政区精确切分为3个词 如何能达成这个效果?

nlpir

Honghe avatar Jul 24 '15 10:07 Honghe

@Honghe 这个小粒度分词功能正在开发中。其实从这个issue被贴上 enhancement 标签的时候就打算加上这个功能了。只是最近工作比较忙还没弄完。

yanyiwu avatar Jul 24 '15 11:07 yanyiwu

Nice. 是要用什么算法实现?

Honghe avatar Jul 24 '15 11:07 Honghe

@Honghe 没准备用什么高深的算法,主要先在工程上做一些词长限制。

yanyiwu avatar Jul 24 '15 11:07 yanyiwu

一个经典的测试语句...

default

mthli avatar Aug 10 '15 13:08 mthli

@yanyiwu 这个功能现在怎么样了?

hotoo avatar Aug 26 '15 08:08 hotoo

@hotoo 基本完成这个功能的,我找个时间完善一下然后在README里面写明一下。

yanyiwu avatar Aug 26 '15 08:08 yanyiwu

GOOD,希望 pinyin 3.0 可以用上这个特性 :)

hotoo avatar Aug 26 '15 08:08 hotoo

最新版本 npm install [email protected] 使用:

var nodejieba = require("nodejieba");
console.log(nodejieba.cut("南京市长江大桥", "MP", 3));

输出:

[ '南京市', '长江', '大桥' ]

yanyiwu avatar Aug 31 '15 16:08 yanyiwu

尝试了下。应该说,还是不太符合期望。古代成语也会被强拆:

[ '破', '釜', '沉舟' ]
[ '叶公', '好', '龙' ]

hotoo avatar Sep 01 '15 01:09 hotoo

粒度换成 4 基本满足需求了,不错。

[ '南京市', '长江大桥' ]
[ '南京', '长江大桥' ]
[ '九江', '长江大桥' ]
[ '武汉', '长江大桥' ]
[ '破釜沉舟' ]
[ '叶公好龙' ]
[ '香港', '特别', '行政区' ]

hotoo avatar Sep 01 '15 01:09 hotoo

跟NLPIR还是有不一样,不知其怎么实现的

Honghe avatar Sep 01 '15 01:09 Honghe

mark

willin avatar Jun 10 '16 04:06 willin

console.log({
    cut: nodejieba.cut(str, 'MP', 3),
    tag: nodejieba.tag(str),
    extract: nodejieba.extract(str, 5)
  });

参数数字从1-5都试过,但str输入为开灯的时候,结果都是一样的:

{ cut: [ '开灯' ],
  tag: [ { word: '开灯', tag: 'v' } ],
  extract: [ { word: '开灯', weight: 10.0294766411 } ] }

开卧室灯,分词的结果是:

{ cut: [ '开', '卧室', '灯' ],
  tag:
   [ { word: '开', tag: 'v' },
     { word: '卧室', tag: 'n' },
     { word: '灯', tag: 'n' } ],
  extract: [ { word: '卧室', weight: 8.20023407859 } ] }

如何能返回 两个结果? 不仅是cut,tag和extract也需要同样的结果。

willin avatar Jun 11 '16 06:06 willin

 nodejieba.cut(str, 'MP', 3),

这个用法在 version 2.0 以后就被废弃了。

yanyiwu avatar Jun 12 '16 14:06 yanyiwu

推荐用什么?

hotoo avatar Jun 13 '16 07:06 hotoo

@hotoo 推荐这么写: https://github.com/hotoo/pinyin/pull/101

yanyiwu avatar Jun 13 '16 16:06 yanyiwu

This issue has not been updated for over 5 years and will be marked as stale. If the issue still exists, please comment or update the issue, otherwise it will be closed after 7 days.

github-actions[bot] avatar Sep 08 '24 13:09 github-actions[bot]