Nodejs做文本数据处理实现详解

 更新时间:2022年11月23日 14:22:41   作者:Bertil  
这篇文章主要为大家介绍了Nodejs做文本数据处理实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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);

以上就是Nodejs做文本数据处理实现详解的详细内容,更多关于Nodejs文本数据处理的资料请关注脚本之家其它相关文章!

相关文章

  • nodejs修复ipa处理过的png图片

    nodejs修复ipa处理过的png图片

    ipa本身是一个zip文件改后缀后解压缩就能看到应用内使用的资源文件,其中png图片资源xcode打包的时候做了些手脚下面我们来看看如何修复这些问题
    2016-02-02
  • nodejs实现截取上传视频中一帧作为预览图片

    nodejs实现截取上传视频中一帧作为预览图片

    这篇文章主要为大家详细介绍了nodejs实现截取上传视频中一帧作为预览图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 解决使用node命令提示:'node'不是内部或外部命令,也不是可运行的程序

    解决使用node命令提示:'node'不是内部或外部命令,也不是可运行的程序

    最近在工作中遇到了个常见的问题,分享给大家,这篇文章主要给大家介绍了关于如何解决使用node命令提示:'node'不是内部或外部命令,也不是可运行的程序的相关资料,需要的朋友可以参考下
    2023-02-02
  • Nodejs监听日志文件的变化的过程解析

    Nodejs监听日志文件的变化的过程解析

    最近有在做日志文件的分析,其中有一个需求:A服务器项目需要用Nodejs监听日志文件的变化,当项目产生了新的日志信息,将新的部分通过socket传输到B服务器项目,本文重点给大家介绍Nodejs监听日志文件的变化的相关知识,一起看看吧
    2019-08-08
  • node实现mock-plugin中间件的方法

    node实现mock-plugin中间件的方法

    这篇文章主要介绍了node实现mock-plugin中间件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • NodeJS学习笔记之Http模块

    NodeJS学习笔记之Http模块

    这里只是熟悉nodejs中的http模块的API,一般在开发过程中使用的是第三方的框架,比如说Express。其中封装了更为简单的构建http服务器的API。
    2015-01-01
  • Node.js实现分片上传断点续传示例详解

    Node.js实现分片上传断点续传示例详解

    这篇文章主要为大家介绍了Node.js实现分片上传断点续传示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 使用nodejs实现JSON文件自动转Excel的工具(推荐)

    使用nodejs实现JSON文件自动转Excel的工具(推荐)

    这篇文章主要介绍了使用nodejs实现,JSON文件自动转Excel的工具,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • windows如何把已安装的nodejs高版本降级为低版本(图文教程)

    windows如何把已安装的nodejs高版本降级为低版本(图文教程)

    这篇文章主要介绍了windows如何把已安装的nodejs高版本降级为低版本,本文分步骤通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • node.js中的fs.fstatSync方法使用说明

    node.js中的fs.fstatSync方法使用说明

    这篇文章主要介绍了node.js中的fs.fstatSync方法使用说明,本文介绍了fs.fstatSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12

最新评论