【问题标题】:node-nlp how to extract email, phone, url?node-nlp 如何提取电子邮件、电话、网址?
【发布时间】:2018-10-09 04:23:23
【问题描述】:

我使用node nlp 来提取电话、网址、电子邮件等。给出的示例代码只是帮助页面中的一个对象。我不知道如何初始化提取代码。提取网址自述为https://github.com/axa-group/nlp.js/blob/master/docs/builtin-entity-extraction.md#ip-extraction

该页面中的一个示例如下所示。

电子邮件提取

它可以识别和提取有效的电子邮件帐户,这适用于任何语言。

"utterance": "My email is something@somehost.com please write me",
"entities": [
  {
    "start": 12,
    "end": 33,
    "len": 22,
    "accuracy": 0.95,
    "sourceText": "something@somehost.com",
    "utteranceText": "something@somehost.com",
    "entity": "email",
    "resolution": {
      "value": "something@somehost.com"
    }
  }
]

我已经安装了 npm 并像这样初始化

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

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

进行提取的下一步必须是什么(需要示例代码)?

npm 网址是:https://www.npmjs.com/package/node-nlp

【问题讨论】:

    标签: node.js nlp


    【解决方案1】:

    我会给你一个示例代码:

    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 和 process 中的语言并改为传递 undefined,这样会从您的句子中猜测语言以适合您的 NlpManger 的最佳语言。

    • 电子邮件提取适用于任何语言。您还有其他更复杂的实体,例如文本数字,这些实体只会针对某些语言提取

    • 实体提取只是一个部分,其他有趣的部分是 NLU 分类器和自然语言生成,您会看到答案“您的电子邮件是 {{email}}”是一个模板,而电子邮件是替换为从对话中提取的内容。

    【讨论】:

    • 成功了,谢谢。是否可以从中获取地址?
    • 好吧,地址提取不能是内置的,因为世界上所有可能的地址都非常不同。但是您在 node-nlp 中有三个与内置不同的实体提取可以帮助您:Enum、regex 和 trim。 Enum 用于对列表中的内容进行精确处理。例如,您可以有一个城市列表,例如 ["Barcelona", "Madrid"]。正则表达式用于使用正则表达式进行提取,例如邮政编码。 Trim 用于根据位置提取其他词...例如“我的地址是 123 ampery road, 08719 Barcelona”,可以从“address is”中提取
    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多