textlens vs text-readability vs natural:哪个 npm 包用于文本分析?

发布: (2026年3月9日 GMT+8 06:00)
8 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的正文内容,我将按照要求保留源链接并进行简体中文翻译。

功能比较

功能textlenstext‑readabilitynatural
可读性公式8(全部主要)70
共识等级
情感分析AFINN‑165贝叶斯 + AFINN
关键词提取TF‑IDFTF‑IDF
关键词密度(n‑grams)单词、二元组、三元组N‑grams
SEO 评分
文本摘要抽取式
阅读时间
分词基础(英文)基础高级(多语言)
词干提取Porter、Lancaster 等
分类朴素贝叶斯、逻辑回归
音系学Soundex、Metaphone 等
依赖001(webworker‑threads,可选)
TypeScript原生否(DefinitelyTyped)否(DefinitelyTyped)
CLI
捆绑大小(最小)~45 KB~8 KB~2 MB+

何时使用每个包

使用 textlens 的情况

您需要 内容分析 —— 可读性评分、情感检测、关键词提取、SEO 评分 —— 并且希望通过一个包、一个 API 完成所有功能。

const { analyze } = require('textlens');

const result = analyze(articleText);
console.log(result.readability.consensusGrade); // 7.2
console.log(result.sentiment.label);            // 'positive'
console.log(result.keywords[0].word);           // 'javascript'
console.log(result.readingTime.minutes);       // 4

最佳适用场景: 博客文章质量检查、内容流水线、文档 lint、SEO 工具、内容管理系统。

使用 text‑readability 的情况

需要可读性评分,其他功能不需要。它体积更小(约 8 KB 对比约 45 KB),只专注于一件事。

const rs = require('text-readability');

const grade = rs.fleschKincaidGrade(text);
const ease  = rs.fleschReadingEase(text);

最佳适用场景: 对体积有要求的简单可读性检查,且不需要情感、关键词或其他分析。

权衡取舍: 没有统一的等级(需自行选择公式),包中不提供 TypeScript 类型,也没有 CLI。

使用 natural 的情况

您需要 超出文本分析的 NLP 功能 —— 带词干提取的分词、朴素贝叶斯分类、音标匹配、字符串距离算法或多语言支持。

const natural = require('natural');

const tokenizer = new natural.WordTokenizer();
const classifier = new natural.BayesClassifier();

classifier.addDocument('great product', 'positive');
classifier.addDocument('terrible service', 'negative');
classifier.train();

console.log(classifier.classify('good experience'));

最佳适用场景: 聊天机器人、搜索引擎、语言处理流水线、文本分类、拼写检查。

权衡取舍: 包体积大(约 2 MB 以上),完全没有可读性公式,也没有内置内容评分。它是通用的 NLP 库,而非内容分析工具。

可读性公式覆盖

公式textlenstext‑readabilitynatural
Flesch Reading Ease
Flesch‑Kincaid Grade
Gunning Fog Index
Coleman‑Liau Index
SMOG Index
Automated Readability Index
Dale‑Chall
Linsear Write
Consensus Grade

textlens 添加了 Linsear Write 公式以及一个共识等级,该等级将所有等级公式的结果取平均,得到一个单一的数值。

情感分析比较

textlensnatural 都提供情感分析,但采用不同的方法。

textlens

使用 AFINN‑165 词典(约 3,300 个词,情感分值从 –5 到 +5)。它返回归一化分数、标签、置信度值,以及匹配的正面/负面词列表:

const { sentiment } = require('textlens');

const result = sentiment('The product is great but the support is terrible.');
console.log(result.label);      // 'neutral' (mixed)
console.log(result.positive);   // ['great']
console.log(result.negative);   // ['terrible']
console.log(result.confidence); // 0.18

natural

提供基于 AFINN 的分析和朴素贝叶斯分类。贝叶斯方法是可训练的——你可以向它提供自己的标记数据:

const natural = require('natural');
const Analyzer = natural.SentimentAnalyzer;
const stemmer = natural.PorterStemmer;
const analyzer = new Analyzer('English', stemmer, 'afinn');

const score = analyzer.getSentiment(['great', 'but', 'terrible']);
// Returns a single number

结论: textlens 开箱即用提供更结构化的输出(标签、置信度、词列表)。natural 在需要可训练分类器时提供更大的灵活性。

关键词提取

textlensnatural 都支持 TF‑IDF 关键词提取。

textlens

const { keywords } = require('textlens');

const kw = keywords(articleText, { topN: 5 });
// [{ word: 'javascript', score: 4.2, count: 8, density: 2.1 }, ...]

natural

const natural = require('natural');
const TfIdf = natural.TfIdf;
const tfidf = new TfIdf();

tfidf.addDocument(articleText);
tfidf.listTerms(0).slice(0, 5);

textlens 通过单独的 density() 函数提供关键词密度百分比和 n‑gram(双词组、三词组)分析。natural 需要更多的设置,但提供了稳健的 TF‑IDF 实现。

支持多文档 TF‑IDF 原生

包大小和依赖

安装大小依赖最小包体积
textlens~180 KB0~45 KB
text‑readability~45 KB0~8 KB
natural~10 MB+多个~2 MB+

如果你在构建无服务器函数或浏览器端工具,体积很重要。

  • text‑readability 是最小的。
  • textlens 是一个合理的折中。
  • natural 较为庞大。

TypeScript 支持

textlens 自带原生 TypeScript 类型 — 无需 @types 包:

import { readability, ReadabilityResult } from 'textlens';

const result: ReadabilityResult = readability(text);

text‑readabilitynatural 通过 DefinitelyTyped 提供社区维护的类型(@types/text-readability@types/natural),但这些类型可能会落后于新版本的发布。

重叠问题

在使用 textlens 之前,构建内容分析流水线需要安装多个包:

# 旧的做法
npm install text-readability   # 可读性评分
npm install sentiment          # 情感分析
npm install keyword-extractor  # 关键词提取
npm install reading-time       # 阅读时间

四个包、四套 API、四份文档。

textlens 将这些功能合并为一个包:

npm install textlens
const { analyze } = require('textlens');

const result = analyze(text);
// result.readability, result.sentiment, result.keywords, result.readingTime

您应该选择哪一个?

  • 选择 textlens 如果您想要从单个零依赖包获得可读性 + 情感 + 关键词 + SEO 评分。它端到端覆盖“内容分析”用例。
  • 选择 text‑readability 如果您只需要可读性评分并希望包体积尽可能小。
  • 选择 natural 如果您需要更广泛的 NLP 功能,如分类、词干提取、音标或多语言分词。它属于不同类别的工具。

没有错误的选择——这取决于您在构建什么。三者均采用 MIT 许可证并积极维护。

链接

披露: 我构建了 textlens。此比较反映了我的诚实评估,但请阅读其他包的文档并自行决定。

这是 textlens 系列 的一部分——关于 JavaScript 和 TypeScript 中文本分析的教程。

0 浏览
Back to Blog

相关文章

阅读更多 »