AI基础:使用Node.js的自然语言处理

丹麦莫尔 经过 丹麦莫尔  |  2018年4月19日

现在几年来,AI和机器学习一直在接管网络论坛,并为热切开发人员的兴奋带来了令人热心的兴奋,他们热衷于让它进入他们的项目。我绝不是机器学习专家,但我在几个开发项目中刷了它的表面,这需要一种“更聪明”的做事方式。

要清楚,我们今天要探索的是冰山一角,当谈到机器学习时,我的例子将是非常基本的,然而自然语言处理是一个非常令人兴奋的前景,并有一些惊人您的项目的创意用例,这些例子是:

  • 更智能的搜索建议和搜索结果
  • 聊天集成以更好地了解用户输入/对话
  • 语音集成文本,类似于亚马逊的服务
  • 内容编辑功能,用于拼写检查,语法等的内容制作者。

 

什么是nlp?

根据维基百科上述定义的自然语言处理,是指:“将计算技术应用于自然语言和言语的分析和综合。”–让我们打破这个。

NLP库将帮助您对字符串执行相对复杂的数据提取。曾经在谷歌搜索过,并拼写了一个错误吗?曾经注意到谷歌怎么告诉你,“显示结果 x as well” –那是工作的一些NLP。谷歌主页上的搜索表格在分析内容时,我们就会易于复杂,我们作为人类键入表单输入。

NLP通常在一串单词上执行。

作为使用NLP库的开发人员,我可以提取大量的信息,可以帮助执行我喜欢的任何任务。对于这个项目,我们将使用 有天赋的人。

为了简洁起见,我只是为了涵盖最有用的方法,即将进入自己的项目并迭代。

我发现 本文标题 在Web Designer Depot:

“秘密设计师:第一次恐怖”

分析整个字符串是一回事,但我们希望能够在单个单词上执行方法,以便从它们中提取更多数据。幸运的是,我们可以使用一个 令牌化器 为此,请看下面:

令牌

var nlp = require('natural');
var tokenizer = new nlp.WordTokenizer();
console.log(tokenizer.tokenize("这 Secret Designer: First Job Horror"));

这将为我们的程序返回一个简单的JS数组:

[ 'The', 'Secret', 'Designer', 'First', 'Job', 'Horror' ]

WordTokenizer 只需将字符串缩小为可以迭代和执行方法的单词。有趣的是,这 有天赋的人 图书馆附带了一些不同的标记。

有天赋的人 收集了一些非常聪明的人写的许多算法来执行我们将讨论的功能,在这些例子中有几种方法在这些例子中,所以如果您想潜入比特更深,所有信息都在 有天赋的人 Github page.

绳子距离

自然用途 Levenshtein距离 算法作为确定两个字符串匹配的方法:

var nlp = require('natural');
console.log(natural.LevenshteinDistance("达贝尔","Dane"));

以上将退出 1 意思是算法的上下文中的两个字符串匹配。正如您所看到的,有很多方法拼写“Daine”– Levenshtein距离 可以获得令人难以置信的复杂,因为它使用了一系列参数称为:

  • 插入
  • 替换
  • 删除

在上面的例子中,我们已插入了一个 i 因此,Levenshtein距离将基于一个基于一个字符串计算字符串 插入。这种方法对于根据糟糕拼写提供建议非常有用。

近似字符串匹配

另一个巨大的功能,可以真正地向上升起您的应用程序是近似字符串匹配。类似于上面的“字符串距离”。实际上,它实现了levenshtein算法。此方法更好地具有更多上下文或某种实体(即,一个城市,国家,人群)的字符串可以在字符串中拼写错误。

语音学

对于声音相同的单词,但具有不同的含义, metaphone.compare() 方法非常有用。

var nlp = require('natural');
var metaphone = nlp.Metaphone;
if(metaphone.compare('see', 'sea')) {
  console.log('Phonetically they match!');
}

拼写检查

SpellChecks可以以动态方式使用,如果您在应用程序中重写SpellCheck功能,或者您正在构建某种文字处理工具,则这种功能很棒。

var checks = ['something', 'soothing']; // Known as a corpus
var spellcheck = new nlp.Spellcheck(checks);

然后我们可以运行:

spellcheck.getCorrections('soemthing', 1); // ['something']

字典

Wordnet是最新的集成 有天赋的人。它是普林斯顿大学开发的字典数据库,它允许瞬间查找单词,包括与该词相关的所有元。元将是动词,形容词和同义词。

WordNet要求您安装WordNet-DB NPM包以运行关键字。您可以通过打字将其安装到项目中:

npm install wordnet-db

这种捆绑的功能对标准化本机词典查找具有一些大的影响,这通常大多数操作系统烘焙到浏览器和软件。再加上图书馆,比如反应,开发人员可能会很远。

 

例子

好的!那么一个完整的例子怎么样?让我们构建一个简单的CLI工具,将提示我们一个单词,然后返回字典查找。请注意,为简洁起见,我已经泄露了检查和错误处理。由于Node.js对承诺支持,因此可以容易地将其添加到逻辑流程中。

首先,创建一个文件夹,其名称是您想要调用您的应用程序的任何内容。接下来,CD进入文件夹并运行:

npm init -y

这将创建一个空白包.JSON。这里有一个重要的属性,这是主要的,它是讲述node.js应用程序从此文件运行。将其保留为index.js并在与package.json中的同一文件夹中创建文件,您可以通过键入:

touch index.js

接下来,我们希望安装几个依赖项:

npm install --save commander wordnet-db natural

Commander.js是NPM的强大包,使基于CLI的应用程序进行了微风。在这篇文章中我们已经很自然。

打开index.js并在文件的第一行上粘贴以下内容:

#!/usr/bin/env node

此行告诉节点在我们时执行文件 NPM链接 我们的字典应用程序 usr / local / bin例如,使用它作为具有标志的程序,例如:

dictionary lookup “HTML”

允许我们为我们的package.json添加两个属性:

"偏好格洛伯": true,
"bin": "./index.js"

偏好格洛伯 将允许我们在OS的任何地方运行我们的软件包,Bin属性只是告诉NPM链接什么文件要执行。确保您在项目文件夹中并运行:

NPM链接

我在下面添加了完整的package.json和index.js作为一个名称:

//gist.github.com/dainemawer/d4dc972fd2c0db5e58615c13c17ca8aa

这是一个解释:

  • 首先,我们需要指挥官,WordNet和Node_Modules的自然。
  • 我们会回来的 WordNetLookup. function in a bit.
  • 我们可以打电话 程序 多次,在这个应用程序中,我打电话给它三次。
  • 第一个调用设置版本和描述。
  • 接下来我们设置命令。此命令将采用一个必需的参数 <word>
  • 然后,我们为您提供一个别名,以防您不想输入 抬头 每次运行该程序时。
  • 然后,我们为命令的描述添加了一个描述,最后我们运行 。行动()
  • 动作方法馈送回调函数,该回调函数将用户键入的用户键入终端上作为参数。在此回调中,我们运行传递给FAD参数的WordNetLookup()并执行查找。

我们现在可以运行 字典查找“Word” 并且程序将执行当前在Wordnet数据库中的任何单词的查找。

那就是它!我希望你已经享受了这个崩溃的课程进入NLP。在我的下一篇文章中,我们将看看ner,或以其他方式称为自然实体识别,这将使我们能够从城市,人民和国家这样的真实事物中提取数据。耦合与NLP,Ner在基于节点的应用程序中提供了一些认真强大的集成。