NibiruanChild
@NibiruanChild

Как разбить текст на предложения, а сложные предложения на простые в Python?

Привет есть текст, его надо разбить на предложения (тут все просто, есть nltk.sent_tokenize), но дальше мне нужно еще и разбить предложения по : и ; при этом сохранив знаки (split(';') не сохраняе знаки)

В итоге нужен одномерный list

Например текст

Мама как-то сказала ему: "Жизнь прожить - не поле перейти. Сынок! Не права ли я? "; сидя одиноко у окна, он смотрел и обдумывал сказанное...

нужно разбить на

Мама как-то сказала ему:
"Жизнь прожить - не поле перейти.
Сынок!
Не права ли я? ";
сидя одиноко у окна, он смотрел и обдумывал сказанное...
  • Вопрос задан
  • 995 просмотров
Пригласить эксперта
Ответы на вопрос 2
Если исхожить из того, что предложения построены правильно (т.е. в том числе нет лишних пробелов, как в примере тут *? ";*), то не слишком мудрёно, можно сделать и так:
delimeters = ['.', ':', ';', '?', '!']
frase = 'Мама как-то сказала ему: "Жизнь прожить - не поле перейти. Сынок! Не права ли я?"; сидя одиноко у окна, он смотрел и обдумывал сказанное...'

words = frase.split()
sentences = []
prev_word = 0
for i in range(len(words)):
    if words[i][-1] in delimeters:
        sent = ' '.join(words[prev_word:i+1])
        sentences.append(sent)
        prev_word = i+1

#Мама как-то сказала ему:
#"Жизнь прожить - не поле перейти.
#Сынок!
#Не права ли я?";
#сидя одиноко у окна, он смотрел и обдумывал сказанное...
Но надо конечно же смотреть по задаче, и добавлять в delimeters ещё элементы. Так, к примеру, для прямой речи возможна конструкция "бла-бла", - сказал он. Её бы тоже разбить на два предложения, но данный код этого не сделает. Так что это скорее идея, в каком направлении думать, а допиливать ещё нужно, исходя из текстов.
Ответ написан
Комментировать
Так себе я питонист... но может так?
str = 'Мама как-то сказала ему: "Жизнь прожить - не поле перейти. Сынок! Не права ли я?"'
delimeter = ':'
strlist = str.split(delimeter)
res = [s + delimeter for s in strlist[:-1]] + [strlist[-1]]

>>> res
['Мама как-то сказала ему:', ' "Жизнь прожить - не поле перейти. Сынок! Не права ли я?"']
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы