Node.js 如何使用节点nlp从句子中提取变量

Node.js 如何使用节点nlp从句子中提取变量,node.js,nlp,Node.js,Nlp,我尝试使用以下代码从具有节点nlp的句子中提取变量: const { NlpManager, ConversationContext } = require('node-nlp'); const manager = new NlpManager({ languages: ['en'] }); const context = new ConversationContext(); (async () => { manager.addDocument('en', 'Hello my na

我尝试使用以下代码从具有节点nlp的句子中提取变量:

const { NlpManager, ConversationContext } = require('node-nlp');

const manager = new NlpManager({ languages: ['en'] });
const context = new ConversationContext();

(async () => {
  manager.addDocument('en', 'Hello my name is %name%', 'greeting.hello');
  manager.addDocument('en', 'I have to go', 'greeting.bye');
  manager.addAnswer('en', 'greeting.hello', 'Hey there!');
  manager.addAnswer('en', 'greeting.bye', 'Till next time, {{name}}!');

  manager.train();

  const result1 = await manager.process('en', 'Hello my name is Thierry', context);
  console.log(result1);
  console.log(context);

  const result2 = await manager.process('en', 'I have to go', context);
  console.log(result2);
})();
上下文不包含
名称
变量

我在github项目页面上直接打开了一个问题,但答案建议添加以下内容:

manager.addNamedEntityText(
  'name',
  'John',
  ['en'],
  ['john', 'John'], 
);
但这并不完全是我想要的,因为只有当句子中的名称有“John”或“John”时,才会添加变量
name

在本期中,我还看到了对变量名的限制

谢谢你的帮助!
Thierry是文档中的一个错误。 这是可以实现的,但问题是“限制”或对其工作方式的误解。 我的意思是,它可以通过这种方式实现:在训练时,它可以检测NER中没有的语句中存在的实体,然后检测这些实体是否是句子的最后一部分,然后根据实体前面的单词构建一个新的Trim实体。因此,给定“hello my name is%name%”,它可以解析为给定此意图,它应该尝试搜索“is”这个词,后面的内容可以是实体

但现在出现了一些问题,不实施的原因是: -有人可以写“你好,我的名字是约翰,我想要一杯啤酒”,然后聊天机器人可以提取实体并认为名字是“约翰,我想要一杯啤酒”。 -如果为了避免只提取一个单词,那么“你好,我的名字是保罗·亨利”会认为这个名字是“保罗”。 -如果它按“是”这个词搜索,那么“你好,今天是美好的一天,我的名字是约翰”就会认为这个名字是“美好的一天,我的名字是约翰”

因此,为了实现您的目标,我建议您在此处查看: 这将告诉您如何基于另一个单词的位置实现修剪命名实体


顺便说一句,我会修正文档中的错误。

非常感谢您的回答!我完全明白你的意思;-)感谢这个伟大的工具!还有一个问题。节点nlp中是否支持对话/中断?如果没有,什么是最好的额外的工具来考虑这样的用例?谢谢也许这与“行动”支持有关。。。我在一些结构中看到了一个带有节点nlpYou的“actions”字段,您可以使用这些操作构建自己的。操作是告诉识别器“嘿,不要说答案,而是执行此方法”的方式。单元测试中有一个例子:OK,我明白了。但识别器似乎与microsoft bot框架有关。。。是否可以在没有此框架(或一部分)的情况下使用识别器,因为我想托管所有内容?我将发布另一个(更详细的)关于这个的问题。谢谢