Поиск знаков препинания в тексте с помощью строковых методов - PullRequest
1 голос
/ 23 апреля 2019

как я могу узнать, когда в строке появляется знак пунктуации (?!;.) Или "<".Я не хочу использовать массив или сравнивать какие-либо буквы, но пытаюсь решить это строковыми методами.Примерно так: </p>

var text = corpus.substr(0, corpus.indexOf(".");

Хорошо, если я явно укажу символ, такой как пункт, он будет работать нормально.Проблема с моим синтаксическим анализом заключается в том, что с длинным текстом в цикле я больше не знаю, как заканчивается предложение, будь то вопросительные знаки или восклицательные знаки.Я попробовал следующее, но это не работает:

var text = corpus.substr(0, corpus.indexOf(corpus.search("."));

Я хочу перебрать длинную строку и использовать каждую найденную пунктуацию, чтобы использовать ее в качестве символа конца предложения.

Знаете, как я могу решить мою проблему?

Ответы [ 2 ]

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

Вы можете начать с RegExp и сравнивать его с идущими символами за символами и сравнивать коды ascii.Разделение - это еще один способ (только что опубликованный выше).

Решение RegExp

function getTextUpToPunc( text ) {
    const regExp = /^.+(\!|\?|\.)/mg;
    for (let match; (match = regExp.exec( text )) !== null;) { 
          console.log(match);
    }
}
getTextUpToPunc(
    "what a chunky funky monkey! this is really someting else"
)

Ключевое преимущество заключается в том, что вам не нужно перебирать всю строку и удерживать контроль над итерацией с помощьюделать regExp.exec( text ).

Решение split, опубликованное ранее, будет работать, но split будет проходить по всей строке.Как правило, это не будет проблемой, но если ваши строки состоят из тысяч и тысяч символов, и вы много делаете эту операцию, имеет смысл подумать о производительности.

И если эта функция будет выполняться много-много разНебольшое улучшение производительности будет заключаться в запоминании создания RegExp:

    const regExp = /^.+(\!|\?|\.)/mg;

Примерно так:

function getTextUpToPunc( text ) {
    if( !this._regExp ) this._regExp = /^.+(\!|\?|\.)/mg;;

    const regExp = this._regExp;
    for (let match; (match = regExp.exec( text )) !== null;) { 
          console.log(match);
    }
}
0 голосов
/ 23 апреля 2019

Используйте регулярное выражение:

var text = corpus.split(/[(?!;.)<]/g);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...