6
社区成员
发帖
与我相关
我的任务
分享自然语言处理(NLP)是人工智能的一个领域,专注于使计算机能够理解、解释和生成人类语言。
它在现代应用中发挥着至关重要的作用,从语言翻译和情感分析到聊天机器人和搜索引擎。
NLP 技术使开发人员能够从大量文本数据中提取见解,使其成为数据分析和决策的强大工具。
在本次会议中,我们将探讨 NLP 的基本概念及其在技术领域的重要性。我们将深入研究由于自然语言的歧义性、上下文依赖性和语言变化而导致的处理自然语言的挑战,以及如何在 Javascript 环境中使用它。
了解这些挑战将帮助您掌握 NLP 任务的复杂性以及解决这些任务所需的复杂算法。
此外,我们还将讨论 NLP 在各个行业的应用,包括医疗保健、金融、客户支持和营销。从医学诊断到基于情感的市场分析,NLP 彻底改变了我们与计算机及其处理信息的交互方式。
让我们深入探讨,但首先,设置您的环境。
要探索 JavaScript 中的 NLP,您必须使用正确的工具和库设置开发环境。
有多个 NLP 库可用,每个库都提供独特的特性和功能。JavaScript 生态系统中的一种流行选择是JavaScript 自然语言工具包 (NLP.js),它提供了广泛的 NLP 功能。
在本次会议中,我们将引导您完成 NLP.js 或您选择的任何其他库的安装和配置。我们将介绍必要的依赖关系,并演示如何加载和预处理 NLP 任务的文本数据。
以下是有关如何安装和配置 NLP.js 以及如何加载和预处理 NLP 任务文本数据的分步指南:
先决条件:
确保您的系统上安装了 Node.js 和 npm(节点包管理器)。您可以从官方网站下载Node.js。
创建一个新的 Node.js 项目:
为您的 NLP 项目创建一个新目录,并使用终端或命令提示符导航到该目录。
初始化项目:
运行以下命令来初始化新的 Node.js 项目。这将创建一个package.json文件,该文件将用于管理项目依赖项。
npm init -y
安装 NLP.js:
使用 npm 安装 NLP.js 及其依赖项
npm install nlp.js
设置文本语料库:
为了演示 NLP 任务,您需要一些文本数据。创建一个新文件,例如data.json,并使用示例文本数据填充它。您可以使用任何 JSON 文件,甚至可以从数据库或 API 等外部源加载数据。
示例data.json:
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-text-color)">"sentences"</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[</span>
<span style="color:var(--syntax-string-color)">"NLP.js is an excellent library for NLP tasks."</span><span style="color:var(--syntax-text-color)">,</span>
<span style="color:var(--syntax-string-color)">"Natural Language Processing is fascinating."</span><span style="color:var(--syntax-text-color)">,</span>
<span style="color:var(--syntax-string-color)">"I love working with AI and NLP technologies."</span>
<span style="color:var(--syntax-text-color)">]</span>
<span style="color:var(--syntax-text-color)">}</span>
</code></span></span>
加载数据中:
接下来,您必须将data.json文件中的数据加载到 Node.js 脚本中。您可以使用fs模块读取文件并解析其内容。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">fs</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">require</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">fs</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-comment-color)">// Read data.json file</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">rawData</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">fs</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">readFileSync</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">data.json</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">data</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">JSON</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">parse</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">rawData</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">sentences</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">data</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">;</span>
</code></span></span>
预处理文本数据:
NLP 任务通常需要预处理文本数据以使其适合分析。此步骤通常涉及标记化(将文本分解为单独的单词或标记)、小写和删除标点符号。
您可以使用 NLP.js 执行以下预处理任务:
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">NlpManager</span> <span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">require</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">node-nlp</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">manager</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-declaration-color)">new</span> <span style="color:var(--syntax-name-color)">NlpManager</span><span style="color:var(--syntax-text-color)">({</span> <span style="color:var(--syntax-name-color)">languages</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">en</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">]</span> <span style="color:var(--syntax-text-color)">});</span>
<span style="color:var(--syntax-comment-color)">// Tokenization and Preprocessing</span>
<span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">tokenizedSentence</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">manager</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">tokenize</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">tokenizedSentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>
自然语言处理任务:
现在您已经加载并预处理了数据,您可以使用 NLP.js 执行各种 NLP 任务。例如,我们进行情感分析:
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-comment-color)">// Sentiment Analysis</span>
<span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">sentiment</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">manager</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">process</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">en</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">`Sentiment for "</span><span style="color:var(--syntax-text-color)">${</span><span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">}</span><span style="color:var(--syntax-string-color)">":`</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">sentiment</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">sentiment</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>
其他 NLP 任务:
NLP.js 支持其他任务,例如命名实体识别 (NER)、语言检测等。您可以参考NLP.js文档来探索这些任务。
文本预处理是 NLP 中的关键步骤,它准备用于分析的原始文本数据。在本次会议中,我们将重点介绍 JavaScript 中文本预处理的基本技术。
首先,让我们加载数据。
加载数据中:
首先,让我们像之前一样从data.json文件中加载数据。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">fs</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">require</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">fs</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-comment-color)">// Read data.json file</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">rawData</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">fs</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">readFileSync</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">data.json</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">data</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">JSON</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">parse</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">rawData</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">sentences</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">data</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">;</span>
</code></span></span>
代币化
标记化是将文本分解为单个单词或标记的过程。我们将探索如何使用 NLP.js 或其他库来标记句子、段落或整个文档。在此示例中,我们将使用自然库来执行标记化。
npm install natural
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">natural</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">require</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">natural</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">tokenizer</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-declaration-color)">new</span> <span style="color:var(--syntax-name-color)">natural</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WordTokenizer</span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">tokens</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">tokenizer</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">tokenize</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">tokens</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>
标记化构成了许多 NLP 任务的基础,例如情感分析、词性标记和语言翻译。
停用词删除是另一个重要的预处理步骤,涉及消除常见且无信息的单词,例如“and”、“the”和“is”。这些词对分析没有什么意义,可以安全地删除以减少数据中的噪音。
小写:
小写是将所有文本转换为小写的过程。此步骤通常用于降低数据的复杂性并使其更易于处理。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">lowercaseSentence</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">toLowerCase</span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">lowercaseSentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>
删除标点符号:
标点符号通常不会给 NLP 任务增加太多价值,因此删除它是一个好主意。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">removePunctuation</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">text</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-name-color)">text</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">replace</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">/</span><span style="color:var(--syntax-literal-color)">[^\w\s]</span><span style="color:var(--syntax-string-color)">/g</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">''</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">};</span>
<span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">cleanedSentence</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">removePunctuation</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">cleanedSentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>
停用词删除:
停用词是常见的词,如“the”、“and”、“in”等,这些词经常被删除,因为它们不具有重要的含义。
对于这一步,我们将使用停用词库
npm install stopword
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">stopword</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">require</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">stopword</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">tokens</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">tokenizer</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">tokenize</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">cleanedTokens</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">stopword</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">removeStopwords</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">tokens</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">cleanedTokens</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>
词干提取和词形还原是将单词还原为其基本形式或词根形式的技术。例如,“running”、“runs”和“ran”都会被简化为“run”。此过程有助于减少词汇量并巩固相似的单词,使文本分析更加高效。
把它们放在一起
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">fs</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">require</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">fs</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">natural</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">require</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">natural</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">stopword</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">require</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">stopword</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-comment-color)">// Read data.json file</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">rawData</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">fs</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">readFileSync</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">data.json</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">data</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">JSON</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">parse</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">rawData</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">sentences</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">data</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-comment-color)">// Tokenization</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">tokenizer</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-declaration-color)">new</span> <span style="color:var(--syntax-name-color)">natural</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WordTokenizer</span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">tokens</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">tokenizer</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">tokenize</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">tokens</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
<span style="color:var(--syntax-comment-color)">// Lowercasing</span>
<span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">lowercaseSentence</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">toLowerCase</span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">lowercaseSentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
<span style="color:var(--syntax-comment-color)">// Removing Punctuation</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">removePunctuation</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">text</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-name-color)">text</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">replace</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">/</span><span style="color:var(--syntax-literal-color)">[^\w\s]</span><span style="color:var(--syntax-string-color)">/g</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">''</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">};</span>
<span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">cleanedSentence</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">removePunctuation</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">cleanedSentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
<span style="color:var(--syntax-comment-color)">// Stop Word Removal</span>
<span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">tokens</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">tokenizer</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">tokenize</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">cleanedTokens</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">stopword</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">removeStopwords</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">tokens</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">cleanedTokens</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>
每个代码段都可以独立执行,以执行特定的文本预处理任务。这些步骤将帮助您使用 JavaScript 清理和准备用于各种 NLP 任务的文本数据。
情感分析是一种迷人的 NLP 应用程序,它使我们能够辨别文本中隐藏的情感或情绪。
凭借其多种用例,例如理解客户反馈、监控社交媒体情绪和衡量公众舆论,情绪分析已成为不可或缺的工具。
了解情感分析概念
在开始实施之前,让我们先熟悉一下情绪分析的基础知识。情感分析旨在从文本中提取和解释主观信息,以确定情感极性,可以是积极的、消极的或中性的。
它需要处理文本数据,识别带有情感的单词或短语,并分配情感分数以对文本的整体情感进行分类。
情感分析方法
情感分析可以使用不同的方法进行,每种方法都有自己的优点和局限性。一些流行的方法包括
基于规则的方法:这些方法利用预定义的规则或词典将情感极性与单词或短语相关联。例如,可以创建积极和消极情绪词典,并且可以根据文本中这些单词的存在来分配情绪分数。
机器学习模型:机器学习技术涉及在标记数据集上训练模型来预测情绪。常见的方法包括朴素贝叶斯、支持向量机 (SVM) 和随机森林。这些模型从标记数据中学习模式,并可以对看不见的文本中的情绪进行分类。
深度学习算法:深度学习模型,例如循环神经网络(RNN)或卷积神经网络(CNN),在情感分析中越来越受欢迎。他们可以学习复杂的关系并捕获上下文信息,从而提高情感分类的准确性。
准备数据
我们已经有一个示例数据集,其中包含要分析的句子以演示情感分析。让我们使用这组例句:
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">sentences</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">[</span>
<span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">NLP.js is an excellent library for NLP tasks.</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
<span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">Natural Language Processing is fascinating.</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
<span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">I love working with AI and NLP technologies.</span><span style="color:var(--syntax-string-color)">"</span>
<span style="color:var(--syntax-text-color)">];</span>
</code></span></span>
情感分析实施
在此步骤中,我们将展示使用 AFINN-111 单词列表(一种流行的基于词典的方法)的简单情感分析实现。我们将利用情感库来计算每个句子的情感分数。
npm install sentiment
情感库提供了一个Sentiment类来分析文本中的情感。它为每个句子分配一个情绪分数,其中正分数表示积极情绪,负分数表示消极情绪,接近零的分数表示中性情绪。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">Sentiment</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">require</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">sentiment</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">sentiment</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-declaration-color)">new</span> <span style="color:var(--syntax-name-color)">Sentiment</span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-name-color)">sentences</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">forEach</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span> <span style="color:var(--syntax-error-color)">=&</span><span style="color:var(--syntax-name-color)">gt</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-text-color)">{</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">result</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">sentiment</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">analyze</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">`Sentiment for "</span><span style="color:var(--syntax-text-color)">${</span><span style="color:var(--syntax-name-color)">sentence</span><span style="color:var(--syntax-text-color)">}</span><span style="color:var(--syntax-string-color)">":`</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">result</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">score</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>
处理否定和上下文
情感分析的一个重要方面是处理否定和上下文。像“不”或“从不”这样的否定词可以反转后续单词的情感极性。例如,“我不喜欢这个产品”应该被归类为负面情绪。依赖解析和上下文嵌入等先进技术可以帮助捕捉这些细微差别。
命名实体识别 (NER) 是一项引人入胜的 NLP 任务,涉及对文本中的命名实体进行识别和分类,例如人名、地点、组织、日期等。
NER 在提取信息和理解文本数据上下文方面发挥着至关重要的作用。本文将深入研究 NER 概念并演示如何在 JavaScript 中使用 NLP 技术实现 NER。我们将指导您完成从文本数据中识别和提取有意义的实体的过程。
了解命名实体识别概念
在深入研究实现之前,让我们先熟悉一下命名实体识别的基础知识。
NER 旨在对文本中的命名实体进行定位和分类,为各种应用提供有价值的信息。它涉及分析句子以识别和分类实体,从而显着增强信息提取和理解。