bravey
Version:
A simple JavaScript NLP-like library to help you creating your own bot.
256 lines (203 loc) • 7.16 kB
TypeScript
// Entities
export interface IntentEntity {
entity: string;
id: string;
}
export interface Entity<T = any> {
entity: string;
string: string;
position: number;
value: T;
priority: number;
}
// Nlp
export type Stemmer = (word: string) => string;
export type Filter = (tokens: string[]) => string[];
export interface NlpResult {
entities: Entity[];
entitiesIndex: { [key: string]: any };
intent: string;
score: number;
}
interface NlpCoreConstructor {
new(nlpName: string, extensions?: {
filter: Filter;
stemmer: Stemmer;
}): NlpCore;
}
type testMethods = "default"|"anyEntity";
interface NlpCore {
addDocument(text: string, intent: string, guess?: {
fromFullSentence?: boolean;
fromTaggedSentence?: boolean;
expandIntent?: boolean;
withNames?: string[];
}): boolean;
addEntity(entity: EntityRecognizer): boolean;
addIntent(intentName: string, entities: IntentEntity[]): boolean;
getConfidence(): number;
hasEntity(entityName: string): boolean;
setConfidence(ratio: number): void;
test(text: string, method?: testMethods): NlpResult|false;
}
interface SequentialConstructor {
new(): NlpCore;
}
interface FuzzyConstructor {
new(): NlpCore;
}
export declare const Nlp: {
Fuzzy: FuzzyConstructor;
Sequential: SequentialConstructor;
};
// Recognizers
export type DateStamp = string;
export type TimeStamp = string;
export interface EntityRecognizer<T = any> {
getEntities(string: string, out?: Entity[]): Entity<T>[];
getName(): string;
}
type regexEntityRecognizerCallback = (match: string[]) => Entity|undefined;
interface RegexEntityRecognizerConstructor<T = any> {
new(entityName: string): IRegexEntityRecognizer<T>;
}
interface IRegexEntityRecognizer<T = any> extends EntityRecognizer<T> {
addMatch(regex: RegExp, callback: regexEntityRecognizerCallback, priority?: number): boolean;
}
interface StringEntityRecognizerConstructor {
new(entityName: string, priority?: number): IStringEntityRecognizer;
}
interface IStringEntityRecognizer extends EntityRecognizer<string> {
addMatch(entityId: string, entityText: string): boolean;
}
interface EmailEntityRecognizerConstructor {
new(entityName: string, priority?: number): EntityRecognizer<string>;
}
interface DateEntityRecognizerConstructor {
new(entityName: string): EntityRecognizer<DateStamp>;
}
interface NumberEntityRecognizerConstructor {
new(entityName: string): EntityRecognizer<number>;
}
interface FreeTextEntityRecognizerConstructor {
new(entityName: string): EntityRecognizer<string>;
}
interface TimeEntityRecognizerConstructor {
new(entityName: string): EntityRecognizer<TimeStamp>;
}
interface Range<T> {
start: T;
end: T;
}
interface TimePeriodEntityRecognizerConstructor {
new(entityName: string): EntityRecognizer<Range<TimeStamp>>;
}
export const StringEntityRecognizer: StringEntityRecognizerConstructor;
export const RegexEntityRecognizer: RegexEntityRecognizerConstructor;
export const EmailEntityRecognizer: EmailEntityRecognizerConstructor;
export const DateEntityRecognizer: DateEntityRecognizerConstructor;
export const NumberEntityRecognizer: NumberEntityRecognizerConstructor;
export const FreeTextEntityRecognizer: FreeTextEntityRecognizerConstructor;
export const TimeEntityRecognizer: TimeEntityRecognizerConstructor;
export const TimePeriodEntityRecognizer: TimePeriodEntityRecognizerConstructor;
// languages
interface Language_EN {
DateEntityRecognizer: DateEntityRecognizerConstructor;
FreeTextEntityRecognizer: FreeTextEntityRecognizerConstructor;
NumberEntityRecognizer: NumberEntityRecognizerConstructor;
Stemmer: Stemmer;
TimeEntityRecognizer: TimeEntityRecognizerConstructor;
TimePeriodEntityRecognizer: TimePeriodEntityRecognizerConstructor;
}
interface Language_IT {
DateEntityRecognizer: DateEntityRecognizerConstructor;
FreeTextEntityRecognizer: FreeTextEntityRecognizerConstructor;
NumberEntityRecognizer: NumberEntityRecognizerConstructor;
Stemmer: Stemmer;
TimeEntityRecognizer: TimeEntityRecognizerConstructor;
TimePeriodEntityRecognizer: TimePeriodEntityRecognizerConstructor;
}
interface Language_PT {
DateEntityRecognizer: DateEntityRecognizerConstructor;
FreeTextEntityRecognizer: FreeTextEntityRecognizerConstructor;
NumberEntityRecognizer: NumberEntityRecognizerConstructor;
Stemmer: Stemmer;
TimeEntityRecognizer: TimeEntityRecognizerConstructor;
TimePeriodEntityRecognizer: TimePeriodEntityRecognizerConstructor;
}
interface Language {
IT: Language_IT;
EN: Language_EN;
PT: Language_PT;
}
export const Language: Language;
// context manager
interface ContextManagerConstructor {
new(extensions?: { sessionManager: any }): ContextManager;
}
interface ContextManager {
addNlp(nlp: NlpCore, contexttags?: string[], method?: testMethods): void;
clearSessionIdData(sessionid: string): boolean;
getSessionIdData(sessionid: string): string[];
removeContext(contexttag: string[]): void;
removeNlp(nlp: NlpCore, contexttags?: string[]): void;
reserveSessionId(id: string): string;
setSessionIdContext(sessionid: string, contexttags: string[]): boolean;
setSessionIdData(sessionid: string, data: {[key: string]: string}): boolean;
testByContext(text: string, texttags?: string[]): ContextManagerResultByContext;
testBySessionId(text: string, texttags?: string[]): ContextManagerResultBySessionId|false;
}
export interface ContextManagerResultByContext {
result: NlpResult;
context: string;
}
export interface ContextManagerResultBySessionId {
result: NlpResult;
context: string;
sessionId: string;
sessionContext: string;
sessionData: any;
}
// session manager
interface SessionManager {
clearData(sessionid: string): boolean;
getContext(sessionid: string): string[];
getData(sessionid: string): string[];
keepAlive(sessionid: string): boolean;
reserveSessionId(): string;
setContext(sessionid: string, contexttags: string[]): boolean;
setData(sessionid: string, data: {[key: string]: string}): boolean;
}
interface InMemorySessionManagerConstructor {
new(): SessionManager;
}
export const InMemorySessionManagerConstructor: InMemorySessionManagerConstructor;
// ApiAi adapter
interface ApiAiAdapterConstructor {
new(packagePath: string, extensions?: { language: string, nlp: string}): ApiAiAdapter;
}
interface ApiAiAdapter {
nlp: NlpCore;
loadEntity(name: string): void;
loadIntent(name: string): void;
prepare(cb: ()=>void): void;
test(text: string, method?: testMethods): NlpResult;
}
export const ApiAiAdapter: ApiAiAdapterConstructor;
// document classifier
interface DocumentClassification {
scores: number[];
winner: {
score: number;
label: string;
}
}
interface DocumentClassifierConstructor {
new (extensions?: { stemmer?: string });
}
interface DocumentClassifier {
addDocument(text: string, label: string): string;
classifyDocument(text: string): DocumentClassification;
}
// Basic filter
export const BasicFilter: Filter;