С хорошей точностью - никак.
Но если какой-то процент ошибок допустим, то можно попробовать взять достаточно большой корпус текстов уже разбитых на абзацы, вычленять в нём отдельные предложения и считать для этих предложений какие-то метрики. Например, количество слов, количество знаков препинания, отношения числа знаков препинания к число слов, средняя длинна слова, результирующий вектор в пространстве слов, ну и ещё хотя бы несколько десятков подобных метрик придумать.
А дальше всё стандартно - есть набор входных параметров, есть результат (является ли предложение первым предложением абзаца, и является ли оно последним). На выходе у вас будет модель, которая для каждого предложения определяет вероятность того, что оно является "головой" абзаца и вероятность того, что это предложение является "хвостом".
А дальше вы просто ставите абзац после тех предложений с высокой вероятность "хвоста", за которым идёт предложение с высокой вероятностью "головы".