2010-11-30 66 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

我不認爲這裏有任何內置的邏輯,所以你應該只是尋找「。」。用一個很好的正則表達式也指定它必須是一個單詞之後(而不是空白),然後是一個空格和一個大寫字母。

編輯:這應該給你一個事件數組,從中你可以選擇最接近字符限制的事件。

相關問題