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

1

Я использую JavaScript, и мой текст:

Dana places, we're having people coming to us people wanna buy condos. They want to move quickly and we're just losing out on a lot of great places. Really what would you say this?

Если у меня есть индексная позиция 6, я хочу получить только первое предложение: Dana places, we're having people coming to us people wanna buy condos.

Если у меня есть индексная позиция 80, я хочу получить только второе предложение: They want to move quickly and we're just losing out on a lot of great places.

Как я могу разобрать предложение на основе позиции?

  • 0
    Как индекс соотносится с возвращаемым значением? Вы говорите, что если индекс находится внутри этого предложения, вы хотите вернуть только это предложение?
  • 0
    Индекс - это просто место в указанной строке
Теги:
nlp
string-parsing

3 ответа

1
Лучший ответ

Если я правильно понимаю, вы должны иметь возможность просто

Разделить на периоды. Получите длину строк. Определите, где длина участка предложения указана.

Учитывая, что вам нужно разделить на "?,!" Кроме того, вам просто нужно пройти через предложения и сгладить их дальше. Ака, снова раскололся.

Честно говоря, возможно, чище использовать регулярное выражение и группу.

Вот версия регулярного выражения

    const paragraph = "Dana places, we're having people coming to us people wanna buy condos. They want to move quickly and we're just losing out on a lot of great places. Really what would you say this?"


    /**
     * Finds sentence by character index
     * @param index 
     * @param paragraph 
     */
    function findSentenceByCharacterIndex(index, paragraph) {

        const regex = /([^.!?]*[.!?])/gm

        const matches = paragraph.match(regex);

        let cursor = 0;

        let sentenceFound;

        for (const sentence of matches) {

            sentenceFound = sentence;

            cursor += sentence.length;

            if( cursor > index )
            {
                break;
            }
        }

        return sentenceFound;
    }


    const found = findSentenceByCharacterIndex(5, paragraph);
0

Вместо того, чтобы пытаться использовать Array.split, может быть лучше всего сделать какой-то традиционный символ путем синтаксического анализа строки. Поскольку мы знаем, какой индекс мы ищем, мы можем просто взглянуть на начало и конец предложения.

Как заканчивается предложение? Обычно с a . , ! , или ? - зная это, мы можем проверить эти символы и решить, какую часть строки мы должны срезать и вернуться к программе. Если перед нашим выбранным индексом нет sentence enders (ae ?!.), Мы предполагаем, что начало строки является началом текущего предложения (0) - мы делаем то же самое с нашим выбранным индексом, за исключением того, что мы назначаем str.length если после индекса нет предложения.

let str = "Dana places, we're having people coming to us people wanna buy condos. They want to move quickly and we're just losing out on a lot of great places. Really what would you say this?";

let getSentence = (ind, str) => {
  let beg, end, flag, sentenceEnder = ["!", ".", "?"];
  Array.from(str).forEach((c, c_index) => {
  if(c_index < ind && sentenceEnder.includes(c)) {
   beg = c_index + 1;
  }
    if (flag) return;
    if (c_index >= ind && sentenceEnder.includes(c)) {
      end = c_index;
      flag = true;
    }
  });
  end = end || str.length;
  beg = beg || 0;
  return str.slice(beg, end);
}

console.log(getSentence(10, str));
console.log(getSentence(80, str));
0

Если вы разделите периоды. Строковый объект имеет метод прототипа, называемый split, который возвращает массив разделительной строки. В приведенном ниже примере str - это переменная, содержащая вашу строку.

const str = 'first sentence. Second sentence. third sentence';
const sentences = str.split('.');
sentences[0] // first sentence
sentences[1] // second sentence, etc
  • 0
    Но я не обязательно хочу первое или второе предложение. Я хочу предложение, в котором находится индекс указанного символа. Я также хочу разделить на? а также !

Ещё вопросы

Сообщество Overcoder
Наверх
Меню