Node.js中文分词库nodejieba使用详解
本文详细介绍Node.js中文分词插件nodejieba的安装配置与核心API。涵盖精确模式、全模式及搜索引擎模式三种分词方式,解析cut、tag、extract等常用函数的参数与用法,并说明自定义词典加载机制及默认词典自动载入规则,助力开发者高效实现中文文本处理。
nodejieba 简介
随着汉语应用的普及,中文信息处理已成为关键的研究领域,广泛应用于搜索引擎的信息检索、机器翻译、数据挖掘及自然语言处理等场景。其中,中文分词是处理流程中最基础且至关重要的一环。
nodeJieba 是结巴中文分词在 Node.js 平台上的实现版本,其底层分词算法由 CppJieba 提供支持。该插件结合了高性能与易用性,是 Node.js 环境下进行中文分词的首选工具之一。
nodejieba 模块提供了三种主要的分词模式供选择:
1. 精确模式:旨在以最高的准确度将句子切分为词语。
2. 全模式:扫描并输出句子中所有可能构成词语的组合,运算速度极快。
3. 搜索引擎模式:在精确模式切分的基础上,对长词进行二次细分,以适配搜索引擎的检索需求。
特点
- 词典加载机制灵活,无需指定路径即可直接使用默认词典;同时支持用户自定义词典路径的灵活配置。
- 底层算法由 C++ 实现,确保了高效的运行性能。
- 兼容多种分词算法,满足不同场景需求。
- 支持动态扩展词库,允许在运行时补充新词汇。
常用API
nodejieba 模块提供了多个实用函数,包括 cut()、cutAll()、cutForSearch()、tag() 以及 extract() 等。
1. cut()函数 用于精确模式分词,仅接收一个参数 sentence,即需要进行分词处理的字符串。
2. cutAll()函数 用于全模式分词,同样仅接收一个参数 sentence,表示待分词的字符串内容。
3. cutForSearch()函数 用于搜索引擎模式分词,仅接收一个参数 sentence,表示需要分词的字符串格式。
4. tag()函数 用于词性标注,根据词语的词性进行分类,仅接收一个参数 sentence,表示需要标注的字符串。
5. extract()函数 用于关键词抽取,包含两个参数:
- 第一个参数 sentence,表示需要从中抽取关键词的字符串。
- 第二个参数 topN,用于指定仅保留出现频率最高的前 N 个关键词。
基本使用
- 安装依赖
npm install nodejieba --save
- 词典载入可灵活配置
若需加载自定义词典而非使用默认设置,例如加载用户词典,可调用以下函数:
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:关键词抽取所需的停用词列表。
注意:若未主动调用词典加载函数,系统在首次调用 cut 等功能函数时会自动加载默认词典,且该词典仅加载一次。
1.分词用法
var nodejieba = require("nodejieba");
var result = nodejieba.cut("南京市长江大桥");// 精确模式
console.log(result);
//["南京市","长江大桥"]
var nodejieba = require("nodejieba");
var result = nodejieba.cutAll("南京市长江大桥");// 全模式
console.log(result);
// [
// '南京', '南京市',
// '京市', '市长',
// '长江', '长江大桥',
// '大桥'
// ]
var nodejieba = require("nodejieba");
var result = nodejieba.cutForSearch("南京市长江大桥");// 搜索引擎模式
console.log(result);
// [ '南京', '京市', '南京市', '长江', '大桥', '长江大桥' ]
2.词性标注
var nodejieba = require("nodejieba");
console.log(nodejieba.tag("红掌拨清波"));
//[ { word: '红掌', tag: 'n' },
// { word: '拨', tag: 'v' },
// { word: '清波', tag: 'n' } ]
3.关键词抽取
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 } ]
// textRankExtract API好像目前已弃用了
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 } ]
4.其他用法
var nodejieba = require('nodejieba');
var sentence = "我是拖拉机学院手扶拖拉机专业的。不用多久,我就会升职加薪,当上CEO,走上人生巅峰。";
var result;
// 没有主动调用nodejieba.load载入词典的时候,
// 会在第一次调用cut或者其他需要词典的函数时,自动载入默认词典。
// 词典只会被加载一次。
// 精确模式
result = nodejieba.cut(sentence);
console.log(result);
// 隐马尔可夫模型
result = nodejieba.cutHMM(sentence);
console.log(result);
// 全模式
result = nodejieba.cutAll(sentence);
console.log(result);
// 搜索引擎模式
result = nodejieba.cutForSearch(sentence);
console.log(result);
// 词性标注:根据词性来分
result = nodejieba.tag(sentence);
console.log(result);
var topN = 5;
// 关键词抽取,topN表示取前N个
result = nodejieba.extract(sentence, topN);
console.log(result);
result = nodejieba.cut("男默女泪");// 精确模式下分成四个字
console.log(result);
// 将该词汇插入词库
nodejieba.insertWord("男默女泪");
result = nodejieba.cut("男默女泪");// 在词库中已有的情况下,不细分了
console.log(result);
// 设定分词后的单个元素最大长度
result = nodejieba.cutSmall("南京市长江大桥", 3);
console.log(result);以上就是 Node.js 中文分词库 nodejieba 的使用详解,更多关于 Node.js 文本数据处理的资料请关注本站其他相关文章!
Java和JavaScript名字像但没关系?详解两者及HTML的技术分工
2026-11-03 20:24:10
Node.js 中 CommonJS 与 ES Modules 模块规范的区别及使用
2026-11-03 15:35:13
先学JS还是先学Java?全栈开发视角的学习路径规划
2026-11-03 13:35:26
解决Node.js安装后提示“node不是内部或外部命令”
2026-11-03 08:39:43
生产环境升级 Node.js 的风险评估与 LTS 版本选择
2026-11-02 10:30:14
