Сначала вы должны разбить текст на отдельные предложения.
Вот простой, далеко не идеальный способ сделать это (я уверен, вы могли бы найти множество более полных шаблонов в другом месте):
'Gsda asd. Gasd sasd. Tfed fdd.'.scan(/(.+?\.) ?/).map(&:first)
#=> ["Gsda asd.", "Gasd sasd.", "Tfed fdd."]
Затем вы должны присоединиться к этим предложениям, следя за длиной абзаца. Вы можете использовать что-то вроде этого:
# using words as units, but sentences are just the same:
s = ['foo', 'bar', 'beef', 'baz', 'hello', 'chunky', 'bacon']
LEN = 7 # minimum length of a paragraph
s.inject([]){|a,i|
if !a.last || a.last.length > LEN
a << i
else
a.last << " #{i}"
end
a
}
#=> ["foo bar beef", "baz hello", "chunky bacon"]