JavaScript可通过正则和专用库实现分词、停用词过滤、词干提取、情感分析、关键词提取及实体识别等基础NLP任务,适用于浏览器或Node.js环境。1. 英文分词可用正则处理,中文推荐nodejieba或compromise;2. 停用词过滤通过集合排除常见虚词,词干提取借助natural库的PorterStemmer;3. 情感分析使用sentiment库判断文本情绪倾向;4. 关键词提取可基于词频或TF-IDF算法,利用natural库实现;5. 实体识别与语法分析可用compromise或wink-nlp,支持识别人名、地点、组织等。尽管生态不如Python丰富,但JS在轻量级应用、网页插件和实时交互中具备实用价值。
JavaScript 虽然不是自然语言处理(NLP)的主流语言(如 Python),但在
浏览器
端或 Node.
js
环境中,依然可以完成许多基础 NLP 任务。通过一些现成库和简单算法,你可以实现分词、词性标注、情感分析、关键词提取等常见功能。
1. 文本分词与预处理
分词是 NLP 的第一步,尤其对英文需要按空格和标点切分,中文则更复杂。在 JavaScript 中,可以借助
正则表达式
或专用库来实现。
英文分词示例:
对于中文,推荐使用
nodejieba
(Node.js)或
compromise
这类支持多语言的库。
立即学习
“
Java免费学习笔记(深入)
”;
2. 停用词过滤与词干提取
去除“的”、“是”、“the”、“and”等无意义词能提升分析效果。
停用词过滤示例:
词干提取可将“running”、“runs”归为“run”。JavaScript 中可用
natural
库(Node.js):
Comet AI 浏览器
下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。
下载
3. 情感分析
判断一段文本是正面、负面还是中性。可以使用轻量级库
sentiment
。
适用于评论分析、用户反馈监控等场景。
4. 关键词提取与 TF-IDF
找出文本中最重要的词汇。一种简单方法是统计词频,更高级可用 TF-IDF 算法。
使用
natural** 库可计算 TF-IDF:
5. 实体识别与语法分析
识别人名、地点、组织等实体,或分析句子结构。推荐使用
compromise** 或 **wink-nlp**。
这类库体积小,适合
前端
运行,无需后端依赖。
基本上就这些。虽然 JavaScript 的 NLP 生态不如 Python 丰富,但对轻量级应用、网页插件、实时交互场景已足够实用。选择合适库,结合正则和统计方法,就能完成大多数基础任务。
function tokenize(text) {
return text
.toLowerCase()
.replace(/[^\w\s]/g, '')
.split(/\s+/)
.filter(word => word.length > 0);
}
// 使用
const tokens = tokenize("Hello, how are you?");
console.log(tokens); // ['hello', 'how', 'are', 'you']
const stopWords = new Set(['the', 'a', 'and', 'or', 'in', 'on', 'at']);
function removeStopWords(tokens) {
return tokens.filter(token => !stopWords.has(token));
}
const natural = require('natural');
const stemmer = natural.PorterStemmer;
console.log(stemmer.stem("running")); // "run"
const Sentiment = require('sentiment');
const sentiment = new Sentiment();
const result = sentiment.analyze("I love this product!");
console.log(result.score); // 正数表示积极
const natural = require('natural');
const tfidf = new natural.TfIdf();
tfidf.addDocument("The sky is blue.");
tfidf.addDocument("The sun is bright.");
tfidf.tfidfs('sun', function(i, measure) {
console.log('Document', i, 'has tf-idf:', measure);
});
const nlp = require('compromise');
const doc = nlp("Apple is launching a new product in California.");
doc.people().out(); // []
doc.organizations().out(); // ['Apple']
doc.places().out(); // ['California']
