Node.js 使用 nodejieba 进行文本分词与关键词提取实战

作者:服务小站

时间:2026-10-22

浏览:319

本文介绍如何在 Node.js 环境中使用 nodejieba 库进行中文文本分词和关键词抽取。通过加载自定义用户词典调整权重,并结合白名单过滤机制,实现针对特定业务场景(如文章 Tag 自动生成)的精准关键词提取,提升内容处理的规范性与效率。

文章目录

在深入技术细节之前,先轻松一下。

Node.js 文本分词与关键词提取背景

Node.js 文本分词与关键词提取背景

众成翻译平台的文章包含标签(tag)字段,用户可据此快速筛选感兴趣的内容,系统也能依据标签关联进行文章推荐。然而,目前这些标签仅在推荐环节设置,且全为英文。人工设定标签往往存在不规范和不完整的问题。尽管文章发布后支持手动编辑,但无法期望用户或管理员能随时维护出精准的标签。因此,我们需要借助自动化工具来生成标签。

在现有的开源分词工具中,jieba 是一款功能强大且性能优异的分词组件。幸运的是,它提供了 Node.js 版本。

nodejieba 安装与自定义词典配置

nodejieba 的安装与使用过程非常简便:

我们可以加载自定义词典,并在词典中为每个词指定权重和词性:

编辑 user.utf8 文件,内容示例如下:\n地瓜 9999 n\n金箍 9999 n\n棒就棒在 9999\n随后通过 nodejieba.load 方法加载该字典。

关键词提取与白名单过滤实战

除了分词功能,我们还可以利用 nodejieba 提取关键词:


const content = `

HTTP、HTTP/2与性能优化

本文旨在通过对比分析,阐述为何应从 HTTP 迁移至 HTTPS,以及为何应支持 HTTP/2。在对比 HTTP 与 HTTP/2 之前,先了解 HTTP 的基本概念。

什么是HTTP

HTTP 是万维网通信的一组规则。作为应用层协议,它运行在 TCP/IP 层之上。当用户通过浏览器请求网页时,HTTP 负责处理请求并在 Web 服务器与客户端之间建立连接。

引入 HTTP/2 后,即使不使用雪碧图、压缩或拼接技术,也能提升性能。但这并不意味着这些技术不再适用。这清楚地表明了我们从 HTTP/1.1 迁移到 HTTP/2 的必要性。\n`;


const nodejieba = require("nodejieba");
const result = nodejieba.extract(content, 20);
console.log(result);

输出结果大致如下:


[ { word: 'HTTP', weight: 140.8704516850025 },
 { word: '请求', weight: 14.23018001394 },
 { word: '应该', weight: 14.052171126120001 },
 { word: '万维网', weight: 12.2912397395 },
 { word: 'TCP', weight: 11.739204307083542 },
 { word: '1.1', weight: 11.739204307083542 },
 { word: 'Web', weight: 11.739204307083542 },
 { word: '雪碧图', weight: 11.739204307083542 },
 { word: 'HTTPS', weight: 11.739204307083542 },
 { word: 'IP', weight: 11.739204307083542 },
 { word: '应用层', weight: 11.2616203224 },
 { word: '客户端', weight: 11.1926274509 },
 { word: '浏览器', weight: 10.8561552143 },
 { word: '拼接', weight: 9.85762638414 },
 { word: '比较', weight: 9.5435285574 },
 { word: '网页', weight: 9.53122979951 },
 { word: '服务器', weight: 9.41204128224 },
 { word: '使用', weight: 9.03259988558 },
 { word: '必要性', weight: 8.81927328699 },
 { word: '添加', weight: 8.0484751722 } ]

我们在字典中添加一些新的关键词:

性能\nHTTP/2

输出结果如下:


[ { word: 'HTTP', weight: 105.65283876375187 },
 { word: 'HTTP/2', weight: 58.69602153541771 },
 { word: '请求', weight: 14.23018001394 },
 { word: '应该', weight: 14.052171126120001 },
 { word: '性能', weight: 12.61259281884 },
 { word: '万维网', weight: 12.2912397395 },
 { word: 'IP', weight: 11.739204307083542 },
 { word: 'HTTPS', weight: 11.739204307083542 },
 { word: '1.1', weight: 11.739204307083542 },
 { word: 'TCP', weight: 11.739204307083542 },
 { word: 'Web', weight: 11.739204307083542 },
 { word: '雪碧图', weight: 11.739204307083542 },
 { word: '应用层', weight: 11.2616203224 },
 { word: '客户端', weight: 11.1926274509 },
 { word: '浏览器', weight: 10.8561552143 },
 { word: '拼接', weight: 9.85762638414 },
 { word: '比较', weight: 9.5435285574 },
 { word: '网页', weight: 9.53122979951 },
 { word: '服务器', weight: 9.41204128224 },
 { word: '使用', weight: 9.03259988558 } ]

在此基础上,我们采用白名单方式过滤出可作为 tag 的词汇:


const content = `

HTTP、HTTP/2与性能优化

本文旨在通过对比分析,阐述为何应从 HTTP 迁移至 HTTPS,以及为何应支持 HTTP/2。在对比 HTTP 与 HTTP/2 之前,先了解 HTTP 的基本概念。

什么是HTTP

HTTP 是万维网通信的一组规则。作为应用层协议,它运行在 TCP/IP 层之上。当用户通过浏览器请求网页时,HTTP 负责处理请求并在 Web 服务器与客户端之间建立连接。

引入 HTTP/2 后,即使不使用雪碧图、压缩或拼接技术,也能提升性能。但这并不意味着这些技术不再适用。这清楚地表明了我们从 HTTP/1.1 迁移到 HTTP/2 的必要性。\n`;


const nodejieba = require("nodejieba");
nodejieba.load({
 userDict: './user.utf8',
});
const result = nodejieba.extract(content, 20);
const tagList = ['HTTPS', 'HTTP', 'HTTP/2', 'Web', '浏览器', '性能'];
console.log(result.filter(item => tagList.indexOf(item.word) >= 0));

最终得到:


[ { word: 'HTTP', weight: 105.65283876375187 },
 { word: 'HTTP/2', weight: 58.69602153541771 },
 { word: '性能', weight: 12.61259281884 },
 { word: 'HTTPS', weight: 11.739204307083542 },
 { word: 'Web', weight: 11.739204307083542 },
 { word: '浏览器', weight: 10.8561552143 } ]

这就是我们期望的结果。

以上介绍了分词库 nodejieba 的基本使用方法。未来,我们可以利用它对众成翻译发布的译文进行自动分析并添加相应 tag,从而为译者和读者提供更优质的用户体验。

以上是关于使用 Node.js 对文本内容进行分词和关键词抽取的介绍,希望对大家有所帮助。如有任何疑问,请留言,小编会及时回复。在此感谢大家对本站的支持!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章