concepts-parser
Version:
Concepts Extracting from text
72 lines (71 loc) • 2.35 kB
JavaScript
"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;