Как я могу получить группу слов из строки? - PullRequest
0 голосов
/ 23 апреля 2019

Мой сценарий следующий:

У меня очень большая строка.Я хочу преобразовать его в массив, где каждый элемент является словом.Затем при каждом рекурсивном обращении к моему методу я хочу взять 50 элементов из массива слов.Например, при первом вызове я хочу принять от 0 до 50, затем при следующем вызове - от 50 до 100 и т. Д.

Моя проблема возникает при проверке, является ли мой начальный и конечный диапазон для массивавне границ или нет.

Мой код выглядит следующим образом:

public async readTts(start: number, end: number): Promise<any> {
    this.talking = true;
    let words: Array<string> = document.getElementById('contenido').innerText.split(' ');
    let string = '';

    words.forEach((word: string) => string += word + ' ');

    console.log(string)

    await this.tts.speak({
      text: string,
      locale: 'es-ES',
      rate: 1
    });

    if (end != words.length - 1) {
      if (start + 50 < words.length - 1) start += 50;
      else start = words.length - 1;

      if (end + 50 < words.length - 1) end += 50;
      else end = words.length - 1;
      this.readTts(start, end);
    } else this.talking = false;
  }

this.readTts(0, 50)

С этим кодом мой код до сих пор не потерпел крах.Но начиная с 3-го рекурсивного вызова, я начинаю получать неправильный текст.Вот тексты, которые я получаю из своего очень длинного текста:

Звоните 1:

La filosofía debería ser accesible para todo el mundo. Por eso publicaré esto en Wrixy.Pero, la filosofía no es un montón de fechas y de estupideces que te obligan a estudiar en el instituto. Si piensas que la filosofía es eso, estás muy equivocado o equivocada.La filosofía es comprender el 

Звоните 2:

mundo, pero no sólo "el mundo" en general... es SOBRE TODO comprenderte A TI MISMO.Por eso, a pesar de que tengo sólo 22 años,... y que bueno, es probable que me queden muchas cosas por vivir y que probablemente en el futuro termine editando algunas partes de esta obra... Considero que he vivido suficientes cosas como para dar mi punto de vista. Para dar a entender las cosas que yo he vivido, de una forma práctica y sencilla.No esperéis que cuide mucho las formas ni revise los textos. Leer esta obra será como simplemente estar chateando con un amigo. Un 

Звоните 3.

que he vivido suficientes cosas como para dar mi punto de vista. Para dar a entender las cosas que yo he vivido, de una forma práctica y sencilla.No esperéis que cuide mucho las formas ni revise los textos. Leer esta obra será como simplemente estar chateando con un amigo. Un amigo que tal vez ha vivido cosas con más intensidad que vosotros y que puede que podáis aprender una o dos cosas de él.Con lo cual, con el simple hecho de que esto sirva a alguno de vosotros para progresar en vuestra vida, y madurar mental y emocionalmente antes de tiempo, mucho antes de lo que lo hice yo y sin tener que pasar por los mismos infiernos por los que tuve que pasar yo... pues me alegro.Titulo esta obra "filosofía de Dalas" porque realmente es MI filosofía de la vida. Es la forma en la que YO veo las 

Как вы можете заметить, в 3-м вызове кажется, что это более 50 слов, и это повторяющийся текст, который был напечатан в вызове 2, вот этот:

que he vivido suficientes cosas como para dar mi punto de vista. Para dar a entender las cosas que yo he vivido, de una forma práctica y sencilla.No esperéis que cuide mucho las formas ni revise los textos. Leer esta obra será como simplemente estar chateando con un amigo. Un 

Что не так наэтот код?Когда я печатаю переменные, которые я использую, они, кажется, имеют правильные значения.

Спасибо!

1 Ответ

1 голос
/ 23 апреля 2019

Прежде всего, я бы начал с создания массива, а затем рекурсивно разделил его.Вы можете легко сделать это с помощью методов массива shift или pop в зависимости от того, в каком направлении вы хотите идти.

Я бы, вероятно, сделал что-то вроде этого:

const text = 'This is a quick test text. We only have several words but it proofs the point.';
const words = text.split(' ');

const read = (maxWords) => {
    let string = '';

    for (let i = 0; i < maxWords; i++) {
        if (words.length > 0) {
            string += words.shift() + ' ';
        }
    }

    // do something with the string
    console.log(string);

    if (words.length > 0) {
        read(maxWords);
    }
}

read(5);

или еслиВы хотите сохранить массив слов:

const text = 'This is a quick test text. We only have several words but it proofs the point.';
const words = text.split(' ');

let position = 0;

const read = (maxWords) => {
    let string = '';

    for (let i = 0; i < maxWords; i++) {
        if (position < words.length) {
            string += words[position] + ' ';
            position++;
        }
    }

    console.log(string);
    // do something with the string

    if (position < words.length) {
        read(maxWords);
    }
}

read(5);

Вывод:

This is a quick test.
text. We only have several
words but it proofs the
point.

Конечно, можно улучшить, потому что в этом примере у меня есть избыточные циклы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...