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
JavaScript
"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