Nodejs做文本数据处理实现详解
作者:Bertil 发布时间:2024-05-13 10:04:06
nodejieba 简介
随着汉语言的广泛应用,中文信息处理成了一个重要的研究课题,常见于搜索引擎:信息检索、中外文自动翻译、数据挖掘技术、自然语言处理等领域。在处理的过程中,中文分词是最基础的一环。
nodeJieba
是结巴中文分词的 Node.js 版本实现, 由 CppJieba
提供底层分词算法实现,是兼具高性能和易用性两者的 Node.js 中文分词插件。
nodejieba模块支持以下3种分词模式:
(1) 精确模式,试图将句子最精准地切开。
(2) 全模式,将句子中所有可以成词的词语都扫描出来,速度非常快。
(3) 搜索引擎模式,在精确模式的基础上对长词再次切分。
特点
词典载入方式灵活,无需配置词典路径也可使用,需要定制自己的词典路径时也可灵活定制。
底层算法实现是C++,性能高效。
支持多种分词算法。
支持动态补充词库。
常用API
noedejieba模块中提供了一系列函数,常用的有cut()函数、cutAll()函数、cutForSearch()函数、tag()函数、extract()函数。
1.cut()函数
用来做精确模式下的内容分词,仅有1个参数sentence,表示需要分词性的内容字符串格式。
2.cutAll()函数
用来做全模式下的内容分词,仅有1个参数sentence,表示需要分词性的内容字符串格式。
3.cutForSearch()函数
用来做搜索引擎模式下的内容分词,仅有1个参数sentence,表示需要分词性的内容字符串格式。
4.tag()函数
用来做词性标注,即根据词性来做分词分类,仅有1个参数sentence,表示需要分词性的内容字符串格式。
5.extract()函数
用来做关键词抽取,有如下2个参数:
第一个参数为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);
来源:https://juejin.cn/post/7168814328626282509


猜你喜欢
- 编程零基础,可以学习 Python 吗”,这是很多初学者经常问我的一个问题。当然,在计算机方面的基础越好,对学习任何一门新的编程语言越有利。
- 在开发一个程序时候,与其让它运行时崩溃,不如在它出现错误条件时就崩溃(返回错误)。这时候断言assert 就显得非常有用。python as
- 代码如下:<% set studentinstance = CreateStudent()&n
- 今天刚好需要配置mysql 5.5.45,因为数据库量挺大的,所以必须优化,要不mysql真的不快。(1)、max_connections:
- 平常需要怎么做来维护数据库吗?1. 允许收缩数据库中的每个文件以删除未使用的页。数据和事务日志文件都可以收缩。数据库文件可以作为组或单独地进
- 先说迭代器,对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用it
- 步骤:1、新建一个空文件,文件名为hhhh2、初始化git init3、自己要与origin master建立连接(下划线为远程仓库链接)g
- 函数getcache,会自动建立需要的缓存。 代码如下:Function getcache(funsname,isreset,is
- 类的特殊成员之call#!/usr/bin/env python# _*_coding:utf-8 _*_class SpecialMemb
- Ajax(Asynchronous Javascript And XML)翻译成英文就是“异步Javascript和XML”。即用Javas
- 目录实现思路使用BackgroundSubtractorMOG2进行背景分割使用人像识别填充面部信息使用形态学填充分割出来的前景将人像与目标
- 调试程序的过程中,发现通过os.path.join拼接的路径出现了反斜杠directory1='/opt/apps/upgradeP
- Ruby 是一门通用的语言,不仅仅是一门应用于WEB开发的语言,但 Ruby 在WEB应用及WEB工具中的开发是最常见的。使用Ruby您不仅
- 当设计一个产品,其中很多地方要把日期类型保存到数据库中,如果产品有兼容不同数据库产品的需求,那么,应当怎样设计呢?当然,首先想到的是,使用数
- 首先停止mysql服务: root@webserver:/home/webmaster# service mysql stop 接着采用忽略
- 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法
- 目的是想通过给定一个ID,取出所有的子ID,包括子ID的子ID。一开始写成FUNCTION,因为FUNCTION调用方便,但是报错:ERRO
- 接触过 Django 的同学都应该十分熟悉它的 ORM 系统。对于 python 新手而言,这是一项几乎可以被称作“黑科技”的特性:只要你在
- fab命令好似结合我们编写的fabfile.py(其它文件名必须添加-f filename应用)来搭配使用的,部分命令行参数可以通过相应的方
- 问题一:将u'\u810f\u4e71'转换为'\u810f\u4e71'方法:s_unicode = u&