Обрезка текста с сохранением остатка текста по предложениям.

spy107

Client
Регистрация
19.08.2012
Сообщения
182
Благодарностей
13
Баллы
18
Здравствуйте. Подскажите пожалуйста как сделать обрезку текста в 900-1500 символов следующим образом:
  • Первый отрезок в максимум 350 символов (разбивка по предложениям нужна, т.е. не ровно 350 символов и режем, а режем там где заканчивается последнее вмещающееся предложение)
  • Второй отрезок максимум 500 символов берется из того что осталось (разбивка по предложениям нужна, т.е. не ровно 500 символов и режем, а режем там где заканчивается последнее вмещающееся предложение)
  • Остаток, если он есть можно удалить просто.
Вопрос, как это сделать? Подскажите умные люди...
Я нашёл только вариант
[\w\W]{0,350}
[\w\W]{0,500}

Но ведь тогда обрезка будет не там где заканчивается предложение, а просто ровно по количеству символов... Да и как брать остаток и из него уже брать 500 символов, тоже не совсем понятно.
 
Последнее редактирование:

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 436
Баллы
113
Я считал не по символам, а по пробелам. Отсчитываем рандомное число пробелов(считай что слов) в тексте, допустим от 10 до 15, заменяем на ". {-String.Enter-} ( или {-String.Space-}, если не разделять на абзацы)
Так же и со вторым предложением.
Организовываем заглавные буквы, там где требуется.
Еще можно рандомных запятых накидать
 

spy107

Client
Регистрация
19.08.2012
Сообщения
182
Благодарностей
13
Баллы
18
Я считал не по символам, а по пробелам. Отсчитываем рандомное число пробелов(считай что слов) в тексте, допустим от 10 до 15, заменяем на ". {-String.Enter-} ( или {-String.Space-}, если не разделять на абзацы)
Так же и со вторым предложением.
Организовываем заглавные буквы, там где требуется.
Еще можно рандомных запятых накидать
Спасибо за ответ. Но мне не совсем нужно то что вы говорите на сколько я понял. Мне не нужно рандомизировать как-то текст, мне нужно конкретно его взять по определённым кускам в символах и чтобы это были законченные предложения.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 600
Баллы
113
^[\w\W]{0,350}[.!?]+
(?<=^[\w\W]{0,350}[.!?]+)[\w\W]{0,500}[.!?]+
 
  • Спасибо
Реакции: spy107

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
Сначала с умом разделяем текст на отдельные предложения и ложем в список_1. Создаем переменную «i» со значением ноль (0)
1. Берем (без удаления) из списка строку № {-Variable.i-} (нулевую) и кладем в переменную Otrezok_temp
2. Увеличиваем {-Variable.i-} на 1
3. Берем (без удаления) из списка строку № {-Variable.i-} (вторую) и добавляем ее к переменной Otrezok_temp
4. Проверяем если ее длина <= 350, то идем в цикле к шагу №2. Если нет, то:
5. Уменьшаем {-Variable.i-} на 1
6. Вырезаем из списка строки в диапазоне от 0 до i
7. Объединяем их с разделителем «пробел», в итоге получаем заветный «Первый отрезок в максимум 350 символов»


Начинаем похожую манипуляцию для "второй отрезок", только если не вырезали, то начинаем не с нулевой строки брать, а с № {-Variable.i-}+1, и длина <= 500 нужна.
 
Последнее редактирование:
  • Спасибо
Реакции: spy107

keltuzhaknut

Client
Регистрация
24.02.2016
Сообщения
221
Благодарностей
3
Баллы
18
Подскажите, а как сделать так, чтобы текст который разбивается на определенное кол-во символов при разбиве не разрывал целые слова а к примеру диапазон до 3000 тыс символов до последнего пробела или точки ?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
Подскажите, а как сделать так, чтобы текст который разбивается на определенное кол-во символов при разбиве не разрывал целые слова а к примеру диапазон до 3000 тыс символов до последнего пробела или точки ?
в регулярках от doc замени
Код:
[.!?]
На свой список символов, которые должны стоять на границе разбивки. В твоем случае:
Код:
[ .]
 
  • Спасибо
Реакции: keltuzhaknut

keltuzhaknut

Client
Регистрация
24.02.2016
Сообщения
221
Благодарностей
3
Баллы
18
Благодарю
 

Atlas

Client
Регистрация
16.02.2014
Сообщения
131
Благодарностей
7
Баллы
18
в регулярках от doc замени
Код:
[.!?]
На свой список символов, которые должны стоять на границе разбивки. В твоем случае:
Код:
[ .]
А можно настроить такую же обрезку, но по тегу </p>?
Пробовал ^[\w\W]{0,300}[</p>]+, но обрезает просто по букве p.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
  • Спасибо
Реакции: Atlas

Atlas

Client
Регистрация
16.02.2014
Сообщения
131
Благодарностей
7
Баллы
18
Спасибо! А можно сделать так, чтобы не максимум 300 символов, а минимум 300 символов? :-)
Т.е отсчитываем кусок текста на 300 символов и после него ищем ближайший </p>.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 168
Баллы
113
Спасибо! А можно сделать так, чтобы не максимум 300 символов, а минимум 300 символов? :-)
Т.е отсчитываем кусок текста на 300 символов и после него ищем ближайший </p>.
^[\w\W]{300,}?</p>+
 
  • Спасибо
Реакции: Atlas

Uralbox

Client
Регистрация
04.02.2019
Сообщения
39
Благодарностей
0
Баллы
6
⚒ Как обрезать текст в переменной - text до 450+- символов, чтобы обрезка была после (.!?), т.е предложение было логически оконченным!?
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)