Форум сайта python.su
Подскажите регулярное выражение.
Есть текст из предложений.Нужно случайно разбить это текст на несколько блоков и занести их в кавычки.
Думаю легче всего это сделать регуляркой,подскажите пожалуйста.
Пример:
Преложение1.Предложение2.Преложение3.Предложение4.Преложение5.Предложение6.Преложение7.Предложение8.Преложение9.Предложение10.Преложение11.Предложение12.
На выходе должно получится что-то вроде этого:
“Преложение1.Предложение2.” “Преложение3.Предложение4.Преложение5.” “Предложение6.Преложение7.Предложение8.” “Преложение9.Предложение10.Преложение11.Предложение12.”
Отредактировано (Янв. 30, 2010 11:21:17)
Офлайн
я думаю проще будет сплитом разбить на предложения, а потом рандомно некоторые слепить
Офлайн
Можно еще так:
import random
import re
text = "Преложение1.Предложение2.Преложение3.Предложение4.Преложение5.Предложение6.Преложение7.Предложение8.Преложение9.Предложение10."
def repl(machobj):
if random.random() > 0.5:
return '%s""' % machobj.group(0)
return machobj.group(0)
result = '"' + re.sub('\.', repl, text) + '"'
Отредактировано (Янв. 30, 2010 13:22:28)
Офлайн
а надо именно рандомное количество предложений брать?
Офлайн
Спасибо,очень красивое решение.
По сравнению с моим быдлокодом на 20 строк :(
А возможно разбивать на блоки по 50-100 символов ?
Ну т.е тоже самое ,но уже учитывается суммарная длина предложений.
Разбивать так же обязательно на предложения.
Отредактировано (Янв. 30, 2010 16:17:01)
Офлайн
очень красивое решение.Спасибо.
А возможно разбивать на блоки по 50-100 символов ?Можно, конечно. Я покажу общее направление мысли, а вы уже дальше разовьете, если захотите.
import re
class TextDivider:
def __init__(self):
self.len = self.minlen = self.prev = 0
def _repl(self, machobj):
start = machobj.start()
if self.len > start and start - self.prev > self.minlen:
self.prev = start
return r'%s""' % machobj.group(0)
return machobj.group(0)
def doit(self, text, minlen):
self.minlen = minlen
self.len = len(text)
return '"' + re.sub(r'(\.)', self._repl, text) + '"'
print TextDivider().doit("Предложение1.Предложение2.Преложение3.Предложение4.Преложение5.Предложение6.Преложение7.Предложение8.Преложение9.Предложение10.", 50)
Отредактировано (Янв. 30, 2010 16:52:19)
Офлайн