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

目录
  • nodejieba 简介
    • 特点
    • 常用API
    • 基本使用
  • 1.分词用法
  • 2.词性标注
  • 3.关键词抽取
  • 4.其他用法

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文本数据处理的资料请关注我们其它相关文章!

(0)

相关推荐

  • Nodejs处理Json文件并将处理后的数据写入新文件中

    目录 处理Json文件并将处理后的数据写入新文件 问题描述 实现过程 用Nodejs解析json数据 处理Json文件并将处理后的数据写入新文件 问题描述 事情是这样的,朋友让我处理一个json文件并将处理后的数据写入新文件.这个json文件的结构如下: [     {         "head_img": "http://wx.qlogo.cn/mmhead/xxxxxxxxxxx",         "nick_name": "x

  • 浅谈NodeJs之数据库异常处理

    本文介绍了NodeJs之数据库异常处理,分享给大家,具体如下: NodeJs版本:4.4.4 数据库链接错误 使用nodejs处理异常最麻烦不过,这里我抛开nodejs提供的domain和一些第三方库专门处理的东西.操作数据库是我们常用的功能.通过回调,我们这里会有很多err出没. 如下: var pool = require('../db.js'); var runtimeLog = require('../log.js').getLogger('runlog'); var Promise =

  • nodejs后台集成ueditor富文本编辑器的实例

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.. 1 下载ueditor nodejs版本 2 复制public目录下面的文件 到项目静态资源public文件夹下 3 在项目根目录创建ueditor文件夹 要复制进来的内容为 4 在根目录的 ueditor文件夹下执行 npm install 安装此目录下面package.json依赖的模块 5 项目根目录下创建 ue.js 代码部分来自于

  • NodeJS实现图片文本分割

    本文实例为大家分享了NodeJS实现图片文本分割的具体代码,供大家参考,具体内容如下 var fs = require('fs'); var jpeg = require('jpeg-js') function getSumRGB(data, i) { var cr = data.data[i+0] var cg = data.data[i+1] var cb = data.data[i+2] var srgb = (cr+cg+cb) return srgb } function getTop

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

    目录 nodejieba 简介 特点 常用API 基本使用 1.分词用法 2.词性标注 3.关键词抽取 4.其他用法 nodejieba 简介 随着汉语言的广泛应用,中文信息处理成了一个重要的研究课题,常见于搜索引擎:信息检索.中外文自动翻译.数据挖掘技术.自然语言处理等领域.在处理的过程中,中文分词是最基础的一环. nodeJieba 是结巴中文分词的 Node.js 版本实现, 由 CppJieba 提供底层分词算法实现,是兼具高性能和易用性两者的 Node.js 中文分词插件. nodej

  • vue实现At人文本输入框示例详解

    目录 知识前置 需求分析 实现 创建能够输入文本的文本框 添加at功能 后记 知识前置 基于vue手把手教你实现一个拥有@人功能的文本编辑器(其实就是微信群聊的输入框) Selection 对象,表示用户选择的文本范围或插入符号的当前 developer.mozilla.org/zh-CN/docs/… contenteditable 是一个枚举属性,表示元素是否可被用户编辑. developer.mozilla.org/zh-CN/docs/… 需求分析 文本框能够输入文本(太简单了) 能够a

  • Nodejs中 npm常用命令详解

    npm是什么 NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载.安装.上传以及管理已经安装的包. npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装的包. 1.npm install moduleNames:安装Node模块 安装完毕后会产生一个node_modules目录,其目录下就是安装的

  • python下读取公私钥做加解密实例详解

    python下读取公私钥做加解密实例详解 在RSA有一种应用模式是公钥加密,私钥解密(另一种是私钥签名,公钥验签).下面是Python下的应用举例. 假设我有一个公钥文件,rsa_pub.pem, 我要读取这个公钥并用它来加密. from M2Crypto import RSA,BIO fp = file('rsa_pub.pem','rb'); pub_key_str = fp.read(); fp.close(); mb = BIO.MemoryBuffer(pub_key_str); pu

  • Pandas 数据处理,数据清洗详解

    如下所示: # -*-coding:utf-8-*- from pandas import DataFrame import pandas as pd import numpy as np """ 获取行列数据 """ df = DataFrame(np.random.rand(4, 5), columns=['A', 'B', 'C', 'D', 'E']) print df print df['col_sum'] = df.apply(lam

  • 对Python 窗体(tkinter)文本编辑器(Text)详解

    如下所示: import tkinter win=tkinter.Tk() text=tkinter.Text(win) #文本编辑器(用于展示数据) text.insert(tkinter.INSERT,"因为你在我心中是那么的具体") text.insert(tkinter.INSERT,"\r\n") #换行 text.insert(tkinter.INSERT,"因为你在我心中是那么的具体") text.insert(tkinter.IN

  • vue-quill-editor+plupload富文本编辑器实例详解

    1,先给vue项目中下载vue-quill-editor依赖npm install vue-quill-editor --save 2,下载plupload依赖npm install plupload --save 3,在组件中分别引入对应的js import { quillEditor }from 'vue-quill-editor' import '@/assets/js/crypto1/crypto/crypto.js' import '@/assets/js/crypto1/hmac/h

  • 对Xpath 获取子标签下所有文本的方法详解

    在爬虫中遇见这种怎么办 想提取名称, 但是 名称不在一个标签里 使用xpath string()方法 例如 data.xpath("string(path)") path -- 你xpath提取的路径 这里提取到父标签 string() 方法会提取子标签多有的文本内容. 以上这篇对Xpath 获取子标签下所有文本的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • pandas 空数据处理方法详解

    这篇文章主要介绍了pandas 空数据处理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法一:直接删除 1.查看行或列是否有空格(以下的df为DataFrame类型,axis=0,代表列,axis=1代表行,以下的返回值都是行或列索引加上布尔值) isnull方法 查看行:df.isnull().any(axis=1) 查看列:df.isnull().any(axis=0) notnull方法: 查看行:df.notnull().a

  • Java 添加、删除、替换、格式化Word中的文本的步骤详解(基于Spire.Cloud.SDK for Java)

    Spire.Cloud.SDK for Java提供了TextRangesApi接口可通过addTextRange()添加文本.deleteTextRange()删除文本.updateTextRangeText()替换文本.updateTextRangeFormat()格式化文本等.本文将从以上方法介绍如何来实现对文本的操作.可参考以下步骤进行准备: 一.导入jar文件 创建Maven项目程序,通过maven仓库下载导入.以IDEA为例,新建Maven项目,在pom.xml文件中配置maven仓

随机推荐