node-jieba
v0.0.3
Published
Node ver of [jieba](https://github.com/fxsjy/jieba).
Downloads
7
Readme
node-jieba
jieba-结巴分词 Node.js 版本.
安装
npm install node-jieba
运行环境
python v2.x
因为主要针对结巴分词Python v2.x版本,3.0+未测试,兼容性:
jieba-v0.35
- node-jieba
- 0.0.3
jieba
或,在此module安装完成后,运行:
$ cd ./node_modules/node-jieba $ sudo bash ./install.sh
安装显示:
注意观察日志,完全安装成功后才能正常使用此module。
关于
此module完全基于原作者的结巴分词Python版本实现,通过Node.js spawn生成一个Python长运行时环境,仅在首次加载时消耗部分时间进行分词模型初始化,性能优势明显。
注意: 为了避免Python调用出现错误,需要对待分词文本中的特殊字符转义处理,例如text.replace(/"/g, '\\"')
。
所有权归原作者所有。
性能
多核处理情况下可达到600Kb/s,虽不及原生1Mb/s,但已够用。
调用
var Jieba = require('node-jieba');
var analyzer = Jieba([选项]);
选项
debug 是否开启调试模式,开启后,将会输出Node.js和Python的交互数据,例:
var analyzer = Jieba({ debug: true });
输出:
事件
exit
在分词器退出时被触发,例:
analyzer.on('exit', function(code, signal){
console.info('[INFO]', 'jieba exit with code:', code);
});
方法
cut
对指定文本分词,例:
analyzer.cut([文本], [选项], [回调函数]);
[文本] 指定分词的文本,类型为字符串(必须)。
[选项] 类型为JS对象(可选)。
{ mode: Jieba.mode.TERM, HMM : true }
- mode
分词模式,可为精确模式
Jieba.mode.TERM
,权匹配模式Jieba.mode.FULL
和搜索引擎模式Jieba.mode.SEARCH
。 - HMM
是否使用HMM,
true
或false
。
- mode
分词模式,可为精确模式
[回调函数] 操作完成后的回调函数(可选),例:
analyzer.cut('带分割文本', function([错误], [结果]){ });
包含两个参数:
- [错误] 错误消息,文本类型。
- [结果] 分词结果,数组类型,每个元素为一个词语。
dict
加载用户自定义词典,例:
analyzer.dict([路径], [回调函数]);
[路径] 自定义字典的路径,可以为相对路径(相对于当前CMD执行目录),也可以为绝对路径,类型为字符串(必须)。
[回调函数] 操作完成后的回调函数(可选),例:
analyzer.dict('./custom/dict.txt', function([错误]){ });
包含一个参数:
- [错误] 错误消息,文本类型。
idf
加载IDF词典,例:
analyzer.idf([路径], [回调函数]);
[路径] 自定义字典的路径,可以为相对路径(相对于当前CMD执行目录),也可以为绝对路径,类型为字符串(必须)。
[回调函数] 操作完成后的回调函数(可选),例:
analyzer.idf('./custom/dict.txt', function([错误]){ });
包含一个参数:
- [错误] 错误消息,文本类型。
stopwords
加载停止词词典,例:
analyzer.stopwords([路径], [回调函数]);
[路径] 自定义字典的路径,可以为相对路径(相对于当前CMD执行目录),也可以为绝对路径,类型为字符串(必须)。
[回调函数] 操作完成后的回调函数(可选),例:
analyzer.stopwords('./custom/dict.txt', function([错误]){ });
包含一个参数:
- [错误] 错误消息,文本类型。
tags
对指定文本提取关键字/词,例:
analyzer.tags([文本], [选项], [回调函数]);
[文本] 指定提取关键字/词的文本,类型为字符串(必须)。
[选项] 类型为JS对象(可选)。
{ top : 20, withWeight: false, textRank : false, allowPOS : ['ns', 'n', 'vn', 'v'] }
- top 提取关键字/词的个数,默认为20,数字类型。
- withWeight
返回结果是否包含权值,
true
或false
。 - textRank
是否使用textRank算法提取关键字/词,
true
或false
。 - allowPOS (结巴分词目前pip版本为0.35,暂不支持此参数,但在dev版本已支持,请耐心等待作者发布新egg)
提取的关键字/词类型,默认
['ns', 'n', 'vn', 'v']
,如需其他关键字/词,例如人名,可设置为['nr', 'ns', 'n', 'vn', 'v']
,具体类型参考ictclas标记法。
[回调函数] 操作完成后的回调函数(可选),例:
analyzer.tags('带分割文本', function([错误], [结果]){ });
包含两个参数:
- [错误] 错误消息,文本类型。
- [结果]
分词结果,数组类型,如
withWeight: false
,那么每个元素为一个词语,不然每个元素为一个长度为2的数组,第一个元素为词,第二个元素为权值。
pseg
对指定文本提取词性,例:
analyzer.pseg([文本], [选项], [回调函数]);
[文本] 指定提取词性的文本,类型为字符串(必须)。
[选项] 类型为JS对象(可选)。
{ HMM : true }
- HMM
是否使用HMM,
true
或false
。
- HMM
是否使用HMM,
[回调函数] 操作完成后的回调函数(可选),例:
analyzer.pseg('带分割文本', function([错误], [结果]){ });
包含两个参数:
- [错误] 错误消息,文本类型。
- [结果] 分词结果,数组类型,每个元素为一个长度为2的数组,第一个元素为词,第二个元素词性(ictclas标记)。
parallel
定义线程数,例:
analyzer.parallel([线程], [回调函数]);
[线程] 线程条数,当小于或等于1时,将关闭多线程,使用单线程处理各类操作,类型为数字(必须)。
[回调函数] 操作完成后的回调函数(可选),例:
analyzer.parallel('./custom/dict.txt', function([错误]){ });
包含一个参数:
- [错误] 错误消息,文本类型。
**注意:**由于结巴分词的线程分割是根据\n
,所以对于Node.js读取一个特定的文本,可以采用text.replace(/\n/, '\\n')
来替换换行符,以便python识别。
示例
可以参考test
目录中的所有js文件。
测试
npm test
本机测试环境:
- Node.js
- v0.10.23
- v0.11.14
- Python
- v2.7.3
License
Copyright 2014 Tjatse
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.