Я предоставлю вам пример кода:
const { NlpManager } = require('node-nlp');
const manager = new NlpManager({ languages: ['en'] });
async function mainExtractEntities() {
const result = await manager.extractEntities('en', 'Are you able to identify that meh@meh.com is an email and moh@moh.com is another email so there are 2 emails?');
console.log(result);
}
async function mainFullExample() {
manager.addDocument('en', 'My mail is %email%', 'email');
manager.addDocument('en', 'My email is %email%', 'email');
manager.addDocument('en', 'Here you have my email: %email%', 'email');
manager.addDocument('en', 'Hello', 'greet');
manager.addDocument('en', 'Good morning', 'greet');
manager.addDocument('en', 'good afternoon', 'greet');
manager.addDocument('en', 'good evening', 'greet');
manager.addAnswer('en', 'email', 'Your email is {{email}}');
manager.addAnswer('en', 'greet', 'Hi!');
await manager.train();
let result = await manager.process('en', 'I think that my mail is meh@meh.com');
console.log(result);
result = await manager.process('en', 'Hello bot!');
console.log(result);
}
mainExtractEntities();
mainFullExample();
Это отобразится в консоли:
[ { start: 30,
end: 40,
len: 11,
accuracy: 0.95,
sourceText: 'meh@meh.com',
utteranceText: 'meh@meh.com',
entity: 'email',
resolution: { value: 'meh@meh.com' } },
{ start: 58,
end: 68,
len: 11,
accuracy: 0.95,
sourceText: 'moh@moh.com',
utteranceText: 'moh@moh.com',
entity: 'email',
resolution: { value: 'moh@moh.com' } },
{ start: 100,
end: 100,
len: 1,
accuracy: 0.95,
sourceText: '2',
utteranceText: '2',
entity: 'number',
resolution: { strValue: '2', value: 2, subtype: 'integer' } } ]
{ locale: 'en',
localeIso2: 'en',
language: 'English',
utterance: 'I think that my mail is meh@meh.com',
classification:
[ { label: 'email', value: 0.9994852170204532 },
{ label: 'greet', value: 0.0005147829795467752 } ],
intent: 'email',
domain: 'default',
score: 0.9994852170204532,
entities:
[ { start: 24,
end: 34,
len: 11,
accuracy: 0.95,
sourceText: 'meh@meh.com',
utteranceText: 'meh@meh.com',
entity: 'email',
resolution: [Object] } ],
sentiment:
{ score: 0.25,
comparative: 0.027777777777777776,
vote: 'positive',
numWords: 9,
numHits: 1,
type: 'senticon',
language: 'en' },
srcAnswer: 'Your email is {{email}}',
answer: 'Your email is meh@meh.com' }
{ locale: 'en',
localeIso2: 'en',
language: 'English',
utterance: 'Hello bot!',
classification:
[ { label: 'greet', value: 0.8826839762075465 },
{ label: 'email', value: 0.1173160237924536 } ],
intent: 'greet',
domain: 'default',
score: 0.8826839762075465,
entities: [],
sentiment:
{ score: 0,
comparative: 0,
vote: 'neutral',
numWords: 2,
numHits: 0,
type: 'senticon',
language: 'en' },
srcAnswer: 'Hi!',
answer: 'Hi!' }
Важные вещи, которые необходимо знать:
Вы можете опустить язык в extractEntities и обработать и передать вместо него неопределенный, таким образом, язык будет угадан из вашего предложения, чтобы соответствовать лучшему языку вашего NlpManger.
Электронная почтадобыча работает для любого языка.У вас есть другие более сложные сущности, такие как текстовые числа, которые будут извлечены только для некоторых языков
Извлечение сущности - это только одна часть, другие интересные стороны - это классификатор NLU и естественный язык.Поколение, вы увидите, что ответ "Ваш адрес электронной почты {{email}}" является шаблоном, и письмо заменяется извлеченным из разговора.