UNPKG

concepts-parser

Version:
72 lines (71 loc) 2.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const debug = require("debug")("concepts-parser:words"); const word_1 = require("./word"); const concept_1 = require("../../concept"); const concepts_1 = require("../../concepts"); class Words { constructor(options, context) { this.options = options; this.context = context; this.list = []; } all() { return this.list; } add(word) { if (!word.isValid()) { return false; } if (word.isNumber) { const prev = (this.list.length && this.list[this.list.length - 1]) || null; if (!prev || prev.isNumber) { return false; } } let length = this.list.length; if (length > 0) { let prev = this.list[length - 1]; prev.rightText = this.context.text.substring(prev.index + prev.value.length, word.index); } this.list.push(word); return true; } concepts() { debug("generating concepts"); const concepts = new concepts_1.Concepts(this.context); if (this.list.length === 0) { return concepts; } let index = 0; let firstWord = true; for (let i = 0; i < this.list.length; i++) { const word = this.list[i]; if (firstWord) { index = word.index; } const connectingWords = word.rightText && (/^[ ]$/.test(word.rightText) || this.options.acceptConceptWordsRegex2.test(word.rightText)); if (connectingWords) { firstWord = false; } else { const text = this.context.text.substring(index, word.index + word.value.length); const concept = new concept_1.Concept({ value: text, index, lang: this.context.lang }); concepts.add(concept); firstWord = true; } } debug("generated concepts"); return concepts; } static create(text, index) { return new word_1.Word(text, index); } } exports.Words = Words;