UNPKG

epic-chat-bot-teacher

Version:

A simple epic-chat-bot Teacher Addon Library. This library is used to build training data for teaching Epic Chat Bot.

231 lines 11.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const epic_crawler_1 = require("epic-crawler"); //@ts-ignore const text_cleaner_1 = __importDefault(require("text-cleaner")); class epicChatBotTeacher { //Constructor constructor(trainingObjects) { //Defaults this.subjectUrl = null; this.crawledData = []; this.trainingObjects = []; this.crawlerSubject = ""; this.storage = null; this.crawlerOptions = { depth: 1, strict: true, cache: true, }; this.init = () => { return new Promise((resolve, reject) => { this.crawler.epicLinkCrawler.storage.init().then(() => { this.crawler.epicLinkCrawler.storage.hasItem("crawledData", "epicCrawler").catch(() => { this.crawler.epicLinkCrawler.storage.addSchema("epicCrawler", false).then(() => { this.crawler.epicLinkCrawler.storage.addItem("crawledData", [], "epicCrawler").catch(() => { //Do nothing. We don't want to stop execution. }); }); }).finally(() => { this.storage = this.crawler.epicLinkCrawler.storage; resolve(); }); }).catch(reject); }); }; this.train = (trainingObjects) => { if (trainingObjects) this.trainingObjects = this.trainingObjects.concat(trainingObjects); return this; }; this.crawlSubject = (subjectUrl, { depth = 1, strict = true, cache = true } = {}) => { return new Promise((resolve, reject) => { this.subjectUrl = subjectUrl; this.crawler.init(this.subjectUrl, { depth: depth, strict: strict, cache: cache, }).then(() => { if (this.storage) this.crawler.crawl().then((data) => { var _a; (_a = this.storage) === null || _a === void 0 ? void 0 : _a.useSchema("epicCrawler").addItem("crawledData", data).catch(() => { //Do nothing. We don't want to stop execution. }).finally(() => { resolve(data); }); }).catch((error) => { reject(error); }); else reject("Teacher Module Has Not Been Initialized Yet!!"); }).catch(reject); }); }; this.getCrawledData = () => { return new Promise((resolve, reject) => { if (this.storage) this.storage.getItem("crawledData", "epicCrawler", false) .then(data => { this.crawledData = data; resolve(data); }).catch(reject); else reject("Teacher Module Has Not Been Initialized Yet!!"); }); }; this.processCrawledData = ({ repeatAllowed = 3, defaultAnswers = [], defaultRepeatAnswers = [], optionsText = "Please choose an option below.", answerActionObject = {}, repeatOptions = [], repeatActionObject = {}, lastActionsObject = {}, } = {}) => { return new Promise((resolve, reject) => { //Get Crawled Data If Any. this.getCrawledData() .then(() => { let processedData = []; //Process Crawled Data this.crawledData.forEach((v, i) => { let title = ""; if (v.title != null) { title = v.title; let description = ""; if (v.description != null) description = v.description; let strongs = ""; if (v.strong.length) v.strong.forEach((q, w) => { strongs += q + " "; }); let alts = ""; if (v.alt.length) v.alt.forEach((q, w) => { alts += q + " "; }); let headings = ""; if (v.headings.length) v.headings.forEach((x, y) => { headings += x + " "; }); let others = alts += strongs + " " + headings; let answers = [ "I have found something related to your query!", "Let me show you something...", "Will this work??", "I have found something similar!" ]; if (defaultAnswers.length) { answers = defaultAnswers; } let repeatAnswers = [ "Sir/Mam, Make sure your question is correct! Or please contact our team member.", "If you think there is an issue with me, please let my creators know about it...", "It seems like you are asking the same question again and again!" ]; if (defaultRepeatAnswers.length) { repeatAnswers = defaultRepeatAnswers; } let keywords = ""; if (v.keywords) keywords = v.keywords; let questions = []; [ title, description, text_cleaner_1.default(others + " " + keywords).condense().valueOf() ].forEach((q, w) => { if (q && q !== "") { questions.push(q); } }); //Create Training Object let trainingObject = this.trainingObject(Date.now() + (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1), true, questions, this.answerObject(repeatAllowed, answers, this.optionsObject(optionsText, [ this.answerOptions(title, description, v.url, v.image) ]), answerActionObject), this.repeatObject(repeatAllowed, repeatAnswers, this.optionsObject(optionsText, repeatOptions), repeatActionObject, lastActionsObject)); processedData.push(trainingObject); } }); this.trainingObjects = this.trainingObjects.concat(processedData); resolve(this.trainingObjects); }).catch(reject); }); }; this.saveTraining = (training) => { return new Promise((resolve, reject) => { if (this.storage) this.storage.addSchema("epicChatBotTeacher", true).then(() => { var _a; let t; if (!(t = training)) t = this.trainingObjects; (_a = this.storage) === null || _a === void 0 ? void 0 : _a.useSchema("epicChatBotTeacher").addItem("trainingData", t).then(resolve).catch(reject); }).catch(reject); else reject("Teacher Module Has Not Been Initialized Yet!!"); }); }; this.trainingObject = (id, botInitializationRequired, questions, answerObject, repeatObject) => { let Object = { id: id, initRequired: botInitializationRequired, questions: questions, answerObject: answerObject, repeatObject: repeatObject, }; return Object; }; this.answerObject = (repeatAllowed, answers, optionsObject, actionsObject = {}) => { let Object = { answered: 0, repeatAllowed: repeatAllowed, answers: answers, optionsObject: optionsObject, actionsObject: actionsObject, }; return Object; }; this.repeatObject = (repeatAllowed, answers, optionsObject, actionsObject = {}, lastActionsObject = {}) => { let Object = { answered: 0, repeatAllowed: repeatAllowed, answers: answers, optionsObject: optionsObject, actionsObject: actionsObject, lastActionsObject: lastActionsObject, }; return Object; }; this.optionsObject = (titleText, answerOptions) => { let Object = { text: titleText, options: answerOptions, }; return Object; }; this.answerOptions = (title, description, url = null, image = null, action = null) => { let Object = { title: title, description: description, url: url, image: image, action: action, }; return Object; }; this.exportTraining = () => { return new Promise((resolve, reject) => { if (this.storage) this.storage .useSchema("epicChatBotTeacher") .getItem("trainingData").then(resolve).catch(reject); else reject("Teacher Module Has Not Been Initialized Yet!!"); }); }; this.crawler = new epic_crawler_1.epicCrawler; if (trainingObjects) this.trainingObjects = trainingObjects; return this; } } exports.epicChatBotTeacher = epicChatBotTeacher; //# sourceMappingURL=epicChatBotTeacher.js.map