如何根据长度拆分每段的文字?

时间:2010-11-30 09:53:03

标签: ruby-on-rails ruby

您好我正在使用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个字符。

2 个答案:

答案 0 :(得分: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"]

答案 1 :(得分:0)

我认为没有任何内置逻辑,所以你应该只寻找“。”有一个很好的正则表达式,还指定它必须在一个单词(不是空格)后面是直的,后跟一个空格和一个大写字母。

编辑:这应该为您提供一系列事件,您可以从中选择最接近字符限制的事件。