'use strict'; /** * Copyright (c) 2017 Baidu.com, Inc. All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * * @file AipNlp.js * @author baidu aip */ const BaseClient = require('./client/baseClient'); const RequestInfo = require('./client/requestInfo'); const HttpClient = require('./http/httpClientNlp'); const objectTools = require('./util/objectTools'); const METHOD_POST = 'POST'; const LEXER_PATH = '/rpc/2.0/nlp/v1/lexer'; const LEXER_CUSTOM_PATH = '/rpc/2.0/nlp/v1/lexer_custom'; const DEP_PARSER_PATH = '/rpc/2.0/nlp/v1/depparser'; const WORD_EMBEDDING_PATH = '/rpc/2.0/nlp/v2/word_emb_vec'; const DNNLM_CN_PATH = '/rpc/2.0/nlp/v2/dnnlm_cn'; const WORD_SIM_EMBEDDING_PATH = '/rpc/2.0/nlp/v2/word_emb_sim'; const SIMNET_PATH = '/rpc/2.0/nlp/v2/simnet'; const COMMENT_TAG_PATH = '/rpc/2.0/nlp/v2/comment_tag'; const SENTIMENT_CLASSIFY_PATH = '/rpc/2.0/nlp/v1/sentiment_classify'; /** * AipNlp类 * * @class * @extends BaseClient * @constructor * @param {string} appid appid. * @param {string} ak access key. * @param {string} sk security key. */ class AipNlp extends BaseClient { constructor(appId, ak, sk) { super(appId, ak, sk); } commonImpl(param) { let httpClient = new HttpClient(); let apiUrl = param.targetPath; delete param.targetPath; let requestInfo = new RequestInfo(apiUrl, param, METHOD_POST); return this.doRequest(requestInfo, httpClient); } /** * 词法分析接口 * * @param {string} text - 待分析文本(目前仅支持GBK编码),长度不超过65536字节 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ lexer(text, options) { let param = { text: text, targetPath: LEXER_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 词法分析(定制版)接口 * * @param {string} text - 待分析文本(目前仅支持GBK编码),长度不超过65536字节 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ lexerCustom(text, options) { let param = { text: text, targetPath: LEXER_CUSTOM_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 依存句法分析接口 * * @param {string} text - 待分析文本(目前仅支持GBK编码),长度不超过256字节 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * mode 模型选择。默认值为0,可选值mode=0(对应web模型);mode=1(对应query模型) * @return {Promise} - 标准Promise对象 */ depparser(text, options) { let param = { text: text, targetPath: DEP_PARSER_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 词向量表示接口 * * @param {string} word - 文本内容(GBK编码),最大64字节 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ wordembedding(word, options) { let param = { word: word, targetPath: WORD_EMBEDDING_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * DNN语言模型接口 * * @param {string} text - 文本内容(GBK编码),最大512字节,不需要切词 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ dnnlmCn(text, options) { let param = { text: text, targetPath: DNNLM_CN_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 词义相似度接口 * * @param {string} word1 - 词1(GBK编码),最大64字节 * @param {string} word2 - 词1(GBK编码),最大64字节 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * mode 预留字段,可选择不同的词义相似度模型。默认值为0,目前仅支持mode=0 * @return {Promise} - 标准Promise对象 */ wordSimEmbedding(word1, word2, options) { let param = { word_1: word1, word_2: word2, targetPath: WORD_SIM_EMBEDDING_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 短文本相似度接口 * * @param {string} text1 - 待比较文本1(GBK编码),最大512字节 * @param {string} text2 - 待比较文本2(GBK编码),最大512字节 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * model 默认为"BOW",可选"BOW"、"CNN"与"GRNN" * @return {Promise} - 标准Promise对象 */ simnet(text1, text2, options) { let param = { text_1: text1, text_2: text2, targetPath: SIMNET_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 评论观点抽取接口 * * @param {string} text - 评论内容(GBK编码),最大10240字节 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * type 评论行业类型,默认为4(餐饮美食) * @return {Promise} - 标准Promise对象 */ commentTag(text, options) { let param = { text: text, targetPath: COMMENT_TAG_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 情感倾向分析接口 * * @param {string} text - 文本内容(GBK编码),最大102400字节 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ sentimentClassify(text, options) { let param = { text: text, targetPath: SENTIMENT_CLASSIFY_PATH }; return this.commonImpl(objectTools.merge(param, options)); } } module.exports = AipNlp;