2010-11-30 4 views
1

Привет, я использую RedCloth, Rails 3.Как разделить текст на абзац по длине?

В настоящее время я разбиваю длинный текст на основе строки «-BREAK-». Как разделить текст на основе длины символа без разделения в середине предложения.

например,

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas at purus eu nisl consequat mattis. Morbi pretium eros eget erat ornare elementum. 

Vivamus in dui sit amet tellus bibendum volutpat. Sed lorem sem, porttitor at mattis quis, volutpat sed quam. Vestibulum eu justo nec dui ullamcorper molestie. Sed eleifend malesuada mattis. Curabitur eleifend elit vitae justo feugiat iaculis. Etiam sed lectus eu quam suscipit fermentum id a sem. 

Phasellus sed odio eu urna gravida venenatis venenatis non justo. Praesent tincidunt velit adipiscing ligula pretium commodo. Cras blandit, nibh ac sagittis egestas, enim odio rutrum metus, vel hendrerit felis urna cursus odio. Maecenas elementum erat et arcu vulputate eu fermentum orci semper. Proin luctus purus sit amet nibh blandit cursus. 

Это будет содержать одну страницу. Это около 794 символов.

ответ

1

Сначала вы должны разделить текст на отдельные предложения.

Вот простой, далеко от совершенства, как для этого (я уверен, что вы могли бы найти множество более полных моделей в других местах):

'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"] 
+0

Тестирование его прямо сейчас. Благодарю. – kgpdeveloper 2010-12-07 07:50:30

0

Я не думаю, что для этого есть встроенная логика, поэтому вам нужно просто искать «.». с хорошим регулярным выражением, также указывающим, что он должен быть прямым после слова (а не пробела), за которым следует пробел и заглавная буква.

Редактировать: это должно дать вам массив вхождений, из которых вы можете выбрать ближайший к пределу символа.

Смежные вопросы