JavaScript 中的自然语言处理

Q神日志 2023-07-18 17:04:00

自然语言处理(NLP)是人工智能的一个领域,专注于使计算机能够理解、解释和生成人类语言。

它在现代应用中发挥着至关重要的作用,从语言翻译和情感分析到聊天机器人和搜索引擎。

NLP 技术使开发人员能够从大量文本数据中提取见解,使其成为数据分析和决策的强大工具。

在本次会议中,我们将探讨 NLP 的基本概念及其在技术领域的重要性。我们将深入研究由于自然语言的歧义性、上下文依赖性和语言变化而导致的处理自然语言的挑战,以及如何在 Javascript 环境中使用它。

了解这些挑战将帮助您掌握 NLP 任务的复杂性以及解决这些任务所需的复杂算法。

此外,我们还将讨论 NLP 在各个行业的应用,包括医疗保健、金融、客户支持和营销。从医学诊断到基于情感的市场分析,NLP 彻底改变了我们与计算机及其处理信息的交互方式。

让我们深入探讨,但首先,设置您的环境。

在 JavaScript 中设置 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文档来探索这些任务。

JavaScript 中的文本预处理

文本预处理是 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 进行情感分析

情感分析是一种迷人的 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>

 

处理否定和上下文

情感分析的一个重要方面是处理否定和上下文。像“不”或“从不”这样的否定词可以反转后续单词的情感极性。例如,“我不喜欢这个产品”应该被归类为负面情绪。依赖解析和上下文嵌入等先进技术可以帮助捕捉这些细微差别。

JavaScript 中的命名实体识别 (NER)

命名实体识别 (NER) 是一项引人入胜的 NLP 任务,涉及对文本中的命名实体进行识别和分类,例如人名、地点、组织、日期等。

NER 在提取信息和理解文本数据上下文方面发挥着至关重要的作用。本文将深入研究 NER 概念并演示如何在 JavaScript 中使用 NLP 技术实现 NER。我们将指导您完成从文本数据中识别和提取有意义的实体的过程。

了解命名实体识别概念

在深入研究实现之前,让我们先熟悉一下命名实体识别的基础知识。

NER 旨在对文本中的命名实体进行定位和分类,为各种应用提供有价值的信息。它涉及分析句子以识别和分类实体,从而显着增强信息提取和理解。

...全文
409 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

6

社区成员

发帖
与我相关
我的任务
社区描述
分享
java-rocketmqpygame前端 个人社区 广东省·广州市
社区管理员
  • Q shen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧