2010-11-30 165 views
1

嗨,我使用RedCloth,Rails的3如何根据长度分段文本?

目前我splitling基于基于字符串的长文“-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

我不认为这里有任何内置的逻辑,所以你应该只是寻找“。”。用一个很好的正则表达式也指定它必须是一个单词之后(而不是空白),然后是一个空格和一个大写字母。

编辑:这应该给你一个事件数组,从中你可以选择最接近字符限制的事件。

相关问题