Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

nodejieba

yanyiwu45.4kMIT3.4.4TypeScript support: included

chinese word segmentation for node

chinese, segment, cppjieba, jieba, 中文分词, 结巴分词

readme

Build Status Financial Contributors on Open Collective Author Platform Performance License NpmDownload Status NPM Version Code Climate


NodeJieba "结巴"分词的Node.js版本

介绍

NodeJieba是"结巴"中文分词的 Node.js 版本实现, 由CppJieba提供底层分词算法实现, 是兼具高性能和易用性两者的 Node.js 中文分词组件。

特点

  • 词典载入方式灵活,无需配置词典路径也可使用,需要定制自己的词典路径时也可灵活定制。
  • 底层算法实现是C++,性能高效。
  • 支持多种分词算法,各种分词算法见CppJieba的README.md介绍。
  • 支持动态补充词库。

对实现细节感兴趣的请看如下博文:

下载

npm install nodejieba

用法

var nodejieba = require("nodejieba");
var result = nodejieba.cut("南京市长江大桥");
console.log(result);
//["南京市","长江大桥"]

More Detals in demo

词典载入可灵活配置

如果没有主动调用词典函数时, 则会在第一次调用cut等功能函数时,自动载入默认词典。

如果要主动触发词典载入,则使用以下函数主动触发。

nodejieba.load();

以上用法会自动载入所有默认词典, 如果需要载入自己的词典,而不是默认词典。 比如想要载入自己的用户词典,则使用以下函数:

nodejieba.load({
  userDict: './test/testdata/userdict.utf8',
});

字典载入函数load的参数项都是可选的, 如果没有对应的项则自动填充默认参数。 所以上面这段代码和下面这代代码是等价的。

nodejieba.load({
  dict: nodejieba.DEFAULT_DICT,
  hmmDict: nodejieba.DEFAULT_HMM_DICT,
  userDict: './test/testdata/userdict.utf8',
  idfDict: nodejieba.DEFAULT_IDF_DICT,
  stopWordDict: nodejieba.DEFAULT_STOP_WORD_DICT,
});

词典说明

  • dict: 主词典,带权重和词性标签,建议使用默认词典。
  • hmmDict: 隐式马尔科夫模型,建议使用默认词典。
  • userDict: 用户词典,建议自己根据需要定制。
  • idfDict: 关键词抽取所需的idf信息。
  • stopWordDict: 关键词抽取所需的停用词列表。

词性标注

var nodejieba = require("nodejieba");
console.log(nodejieba.tag("红掌拨清波"));
//[ { word: '红掌', tag: 'n' },
//  { word: '拨', tag: 'v' },
//  { word: '清波', tag: 'n' } ]

More Detals in demo

关键词抽取

var nodejieba = require("nodejieba");
var topN = 4;
console.log(nodejieba.extract("升职加薪,当上CEO,走上人生巅峰。", topN));
//[ { word: 'CEO', weight: 11.739204307083542 },
//  { word: '升职', weight: 10.8561552143 },
//  { word: '加薪', weight: 10.642581114 },
//  { word: '巅峰', weight: 9.49395840471 } ]

console.log(nodejieba.textRankExtract("升职加薪,当上CEO,走上人生巅峰。", topN));
//[ { word: '当上', weight: 1 },
//  { word: '不用', weight: 0.9898479330698993 },
//  { word: '多久', weight: 0.9851260595435759 },
//  { word: '加薪', weight: 0.9830464899847804 },
//  { word: '升职', weight: 0.9802777682279076 } ]

More Detals in demo

Develop NodeJieba

git clone --recurse-submodules https://github.com/yanyiwu/nodejieba.git
cd nodejieba
npm install
npm test

应用

性能评测

应该是目前性能最好的 Node.js 中文分词库 详见: Jieba中文分词系列性能评测

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

changelog

CHANGELOG

v3.4.3

  • 8723bbb [submodule/cppjieba] from v5.1.3 to v5.4.0
  • 7787450 Update stale-issues.yml: 3y -> 1y
  • 90d5b6b [github/actions] stale 5 years -> 3 years
  • b69d1fe [github/actions] stale issues
  • 5241ef1 [.github][npm publish] upgrade */v2 to */v4 and node-version 18->20

v3.4.2

  • 9bc3979 [package] clean unused deps
  • e8988c5 git rm .travis.yml
  • 839f203 Merge pull request #236 from yanyiwu/dependabot/npm_and_yarn/js-yaml-3.14.1
  • 26f0872 Bump js-yaml from 3.6.1 to 3.14.1
  • 1788029 Merge pull request #235 from yanyiwu/dependabot/npm_and_yarn/multi-037252cf8f
  • 641b2d7 Bump minimist, coveralls and mocha
  • e01e1c4 [CI] GitHub Release: publish --release instead of draft

v3.4.1

  • [demo] using nodejieba-demo instead of test/demo.js
  • git submodule update --remote to upgrade cppjieba from v5.1.2 to v5.1.3

v3.4.0

  • package-lock.json updated by 'npm install'
  • npm outdated; npm update;

v3.3.1

  • [CI] fix github/actions:auto-release

v3.3.0

  • [CI] auto github/release by node-pre-gyp-github
  • [github/actions] CI add windows,macos, node-22, removed node-16

v3.2.0

  • [submodule] rm dict and deps, use submodules/cppjieba instead

v3.1.1

  • Using GitHub Actions Workflow to Publish NPM Package

v3.1.0

v2.6.0

v2.5.2

v2.5.1

  • Merged pull request 179
  • Since v2.5.0, node-addon-api is used, and only Node.js versions 10.0.0 and above are supported. There was an error in the previous description in the v2.5.0 version.

v2.5.0

v2.4.2

v2.4.1

  • upgrade deps/limonp -> v0.6.3
  • upgrade deps/cppjieba -> v5.0.3
  • merged pull request 148

v2.4.0

  • revert commit-6600629 to be compatiable with cppjieba.
  • upgrade deps/limonp -> v0.6.2
  • upgrade deps/cppjieba -> v5.0.2

v2.3.5

v2.3.3

v2.3.2

v2.3.1

v2.3.0

v2.2.7

v2.2.6

v2.2.5

v2.2.4

v2.2.3

  • update cppjieba -> 4a755dff to try fixing issue 65

v2.2.2

  • upgrade cppjieba -> v4.8.1
  • (word freq tag) format in user dict has been supported.

v2.2.1

  • fix bug in v2.2.0 about 'cutSmall'

v2.2.0

  • add api cutSmall to cut words in specific word length limit

v2.1.0

  • function tag,extract return objects, instead of strings.
  • fix issue issue 58

v2.0.0

  • Upgrade cppjieba -> v4.8.0
  • rewrite cut function:
  • add cutAll for old cut(s, "FULL") function.
  • add cutHMM for old cut(s, "HMM") function.
  • add cutForSearch for old cut(s, "Query") function.

v1.4.11

  • Upgrade dependencies

  • "nan": "~2.2.0" -> "~2.3.0"

  • Upgrade devDependencies

  • "mocha": "~2.3.4" -> "~2.4.5"

  • "should": "~8.0.2" -> "~8.3.1"

  • Upgrade deps/

  • cppjieba -> v4.7.0

  • limonp -> v0.6.1

v1.4.10

Upgrade to fix potential trouble:

  • limonp -> v0.5.6
  • cppjieba -> v4.5.2

v1.4.9

Upgrade limonp and cppjieba to fix issue48

  • limonp -> v0.5.4
  • cppjieba -> v4.5.0

v1.4.8

Upgrade:

v1.4.7

Upgrade:

  • limonp -> v0.5.3, fix incompatibility problem in Windows.

v1.4.6

Change source codes layout

  • lib/jieba/limonp -> deps/limonp
  • lib/jieba -> deps/cppjieba

Upgrade:

  • limonp -> v0.5.2, fix incompatibility problem of issue45
  • cppjieba -> v4.3.2

v1.4.5

  • 修复多余日志输出的问题。

v1.4.4

  • 升级 cppjieba 到最新版本 v4.2.1

v1.4.3

  • 升级 cppjieba 到最新版本 v4.1.2

v1.4.2

  • 升级 package.json 里面的依赖库。

v1.4.1

v1.4.0

  • 对MP算法的分词方式新增一个粒度参数,解决issue29关于细粒度分词的问题。

v1.3.0

  • 合并 [pr37], 修复 issue36 。 放弃对旧版本 node.js v0.11 的支持。

v1.2.2

  • 修复依赖的nan版本的问题。

v1.2.1

  • 修复load函数重复调用时内存没有释放的问题。

v1.2.0

  • 同时支持【不配置词典文件直接使用】和【灵活配置词典】的需求。

v1.1.0

  • 新增支持动态增加词库的API函数: insertWord

v1.0.3

  • Merge Pull Request pr28,显示声明依赖的是 node 后缀的文件,解决一些库重写了 require 的问题。

v1.0.2

  • 修复在 windows 上编译不通过的问题,提升兼容性。

v1.0.1

  • 修复在iojs v2.2.1 上编译不通过的问题,提升兼容性。

v1.0.0

  • 使用cppjieba v3.0.0 版本,使用更简洁的接口函数,可以使用参数指定切词方法。
  • require("nodejieba") 时自动载入词典,用户无需再烦心字典的事情,实现即插即用。
  • 听从 issue23 的建议,废除异步调用的接口,现在的接口函数都是同步调用函数,分别是 cut, tag, extract 。因为分词毕竟是CPU密集型的事情,没必要使用异步调用。

v0.2.13

  • 升级nan^v1.8.0 以支持 iojs-v2.x

v0.2.12

  • 新增以下默认词典地址,让使用者不需要自己写词典的相对地址。
  • nodejieba.DEFAULT_DICT
  • nodejieba.DEFAULT_HMM_DICT
  • nodejieba.DEFAULT_USER_DICT
  • nodejieba.DEFAULT_IDF_DICT
  • nodejieba.DEFAULT_STOP_WORD_DICT

v0.2.11

  • 更新 cppjieba
  • 打印更详细的初始化错误日志信息。

v0.2.10

  • 避免一些在Mac系统下的词典载入日志,更干净的用户体验。

v0.2.9

  • 支持vs2012编译。

v0.2.8(deleted)

  • 支持vs2012编译。

v0.2.7

  • 关键词抽取支持自定义词典(可选参数)。

v0.2.6

  • 修复不同Node版本的兼容性问题,在v0.11.13下测试通过。
  • 支持自定义词典(可选参数)。
  • 增加关键词抽取功能。

v0.2.5

  • 增加词性标注功能

v0.2.4

  • 更新 package 兼容更低版本的 npm

v0.2.3

  • 更新 cppjieba ,减少内存使用。

v0.2.2

  • 在queryLoadDict 函数中增加query模式的粒度阈值作为可选参数。

v0.2.1

  • 增加搜索引擎分词模式,分别对应的调用函数是 queryLoadDict, queryCutSync, queryCut

v0.2.0

  • 将原来的 cut 阻塞分词模式改为非阻塞模式
  • 阻塞分词模型的函数名为 cutSync

v0.1.4

  • 修复关于较低版本编译器需要使用tr1/unordered_map导致和node-gyp编译选项-fno-rtti冲突的编译错误问题。

v0.1.3

  • 更新cppjieba,支持更低版本的g++。

v0.1.2

  • 更新cppjieba,使用less_memory这个branch来减少Trie树内存的开销。

v0.1.1

  • 依照node的c++扩展的常规写法,对cppjieba进行简单的包装,并已npm publish