gpt4 book ai didi

ruby - 在字符限制处拆分文本并返回字符串数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:33 25 4
gpt4 key购买 nike

利用我的 cpp 技能,我开发了以下旧式递归方法,将文本拆分为字符串数组,最近的分词符由字符数参数(“limit”)限制或限制:

#see below for sample usage 
def split_at_limit(text, limit, result)
slices = text.scan(/.{1,#{limit}}/m)
return if slices.blank?
first_slice = slices.first
if first_slice.last == " " || (slices.length > 1 && slices[1].first == " ")
result << first_slice
slices.delete_at 0
split_at_limit(slices.join, limit, result)
elsif slices.length > 1
first_slice_length = first_slice.length - 1
appendix = ""
i = 0
first_slice_length.times do |i|
break if first_slice[first_slice_length-i].chr == " "
appendix = "#{first_slice[first_slice_length-i].chr}#{appendix}"
first_slice[first_slice_length-i] = ''
end
first_slice = slices.first if i == first_slice.length
result << first_slice
slices.delete_at 0
slices[0] = "#{appendix}#{slices[0]}"
split_at_limit(slices.join, limit, result)
end
result
end

达到了目的,但是有没有更好的方法(swift算法)来实现上述目标?

编辑:

示例用法

def datadump
return <<-END_TEXT
Suspendisse ut neque magna, nec elementum odio. Integer quis massa tortor, commodo tincidunt augue. Donec congue lacinia odio in aliquet. Ut vehicula elementum mi id lobortis. Sed eget pretium orci. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vel velit hendrerit nisl facilisis gravida quis ac nunc. Morbi tincidunt ligula ut turpis faucibus placerat. Duis commodo turpis vehicula diam imperdiet eu sollicitudin erat luctus. Nulla facilisi. Aenean aliquam facilisis enim et ultrices. Nulla adipiscing semper massa quis egestas. Nam tempus suscipit semper. Suspendisse sed venenatis lacus.

Phasellus ac tortor a nisi porttitor rutrum eu nec odio. Cras pulvinar, eros non faucibus semper, odio odio mollis justo, vulputate rhoncus odio justo id purus. Donec tincidunt malesuada enim, luctus tempor augue interdum id. Maecenas luctus imperdiet justo, ut vulputate turpis varius et. Nunc placerat pellentesque interdum. Pellentesque porta dignissim neque a dignissim. Mauris vitae nisi at tortor hendrerit accumsan in at est. Phasellus erat mi, eleifend eu imperdiet sit amet, accumsan posuere risus. Donec at faucibus libero. Proin lectus risus, aliquet a dictum nec, iaculis a diam. Ut velit nibh, ultricies eget convallis a, dignissim vitae tortor. Fusce sed lorem mauris, non gravida nisi.

Aliquam malesuada cursus dui, in vestibulum lectus vulputate ut. Proin semper facilisis augue, ut imperdiet erat facilisis ac. Maecenas laoreet faucibus mi, ut mollis diam aliquet scelerisque. Praesent sit amet magna quam, nec auctor nisi. Cras tristique varius scelerisque. Donec vehicula lectus ac urna fermentum faucibus. Aenean nec augue vitae dui tristique luctus. Donec lacus leo, pellentesque ut aliquet vitae, eleifend bibendum neque. Vivamus id diam risus, et ornare magna. Praesent quam dui, congue ut cursus sed, egestas id tortor. Integer eget lacus purus. Sed fermentum convallis quam, sit amet dapibus mi tristique non. Donec vehicula ligula eget risus varius aliquam. Praesent ut odio eu sem mollis euismod. Donec egestas tincidunt dolor et imperdiet.
END_TEXT
end

puts split_at_limit(datadump, 40, []).inspect

#gives=>["Suspendisse ut neque magna, nec ", "elementum odio. Integer quis massa ", "tortor, commodo tincidunt augue. Donec ", "congue lacinia odio in aliquet. Ut ", "vehicula elementum mi id lobortis. Sed ", "eget pretium orci. Cum sociis natoque ", "penatibus et magnis dis parturient ", "montes, nascetur ridiculus mus. Nulla ", "vel velit hendrerit nisl facilisis ", "gravida quis ac nunc. Morbi tincidunt ", "ligula ut turpis faucibus placerat. Duis", " commodo turpis vehicula diam imperdiet ", "eu sollicitudin erat luctus. Nulla ", "facilisi. Aenean aliquam facilisis enim ", "et ultrices. Nulla adipiscing semper ", "massa quis egestas. Nam tempus suscipit ", "semper. Suspendisse sed venenatis ", "lacus.\n\n Phasellus ac tortor a nisi", " porttitor rutrum eu nec odio. Cras ", "pulvinar, eros non faucibus semper, odio", " odio mollis justo, vulputate rhoncus ", "odio justo id purus. Donec tincidunt ", "malesuada enim, luctus tempor augue ", "interdum id. Maecenas luctus imperdiet ", "justo, ut vulputate turpis varius et. ", "Nunc placerat pellentesque interdum. ", "Pellentesque porta dignissim neque a ", "dignissim. Mauris vitae nisi at tortor ", "hendrerit accumsan in at est. Phasellus ", "erat mi, eleifend eu imperdiet sit amet,", " accumsan posuere risus. Donec at ", "faucibus libero. Proin lectus risus, ", "aliquet a dictum nec, iaculis a diam. Ut", " velit nibh, ultricies eget convallis a,", " dignissim vitae tortor. Fusce sed lorem", " mauris, non gravida nisi.\n\n ", "Aliquam malesuada cursus dui, in ", "vestibulum lectus vulputate ut. Proin ", "semper facilisis augue, ut imperdiet ", "erat facilisis ac. Maecenas laoreet ", "faucibus mi, ut mollis diam aliquet ", "scelerisque. Praesent sit amet magna ", "quam, nec auctor nisi. Cras tristique ", "varius scelerisque. Donec vehicula ", "lectus ac urna fermentum faucibus. ", "Aenean nec augue vitae dui tristique ", "luctus. Donec lacus leo, pellentesque ut", " aliquet vitae, eleifend bibendum neque.", " Vivamus id diam risus, et ornare magna.", " Praesent quam dui, congue ut cursus ", "sed, egestas id tortor. Integer eget ", "lacus purus. Sed fermentum convallis ", "quam, sit amet dapibus mi tristique non.", " Donec vehicula ligula eget risus varius", " aliquam. Praesent ut odio eu sem mollis", " euismod. Donec egestas tincidunt dolor "]

最佳答案

假设:

You want is to split the text into maximum-40-character long strings each. And each string has been split at a word boundary that is as close as possible to the limit (i.e. 40) but should not exceed the limit.

这是一种解决方案:

def datadump
return <<-END_TEXT
Suspendisse ut neque magna, nec elementum odio. Integer quis massa tortor, commodo tincidunt augue. Donec congue lacinia odio$
END_TEXT
end

a = datadump.split(/(.{1,40}\b)/)
a = a.reject{|el| el.size == 0}
puts a # or p a to see results

关于ruby - 在字符限制处拆分文本并返回字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com