Работа с текстом / подсказка к 3 задачке

3

Вывести все предложения в тексте с четным количеством слов

Что вывести все предложения в тексте, надо сначала научиться разбивать текст на предложения. Тут опять нам на помощь придут регулярные выражения.

Условно если текст простой, то каждое предложение в нем оканчивается на точку. Попробуем разбить так

import re

text = """
- Бедные мои ножки! 
Кто же вас будет теперь обувать? 
Кто натянет на вас чулки и башмаки? 
Мне же до вас теперь, мои милые, не достать. 
Мы будем так далеки друг от друга, что мне будет совсем не до вас... 
Придется вам обходиться без меня.
"""
sentences = re.split(".", text)
print(sentences)

выдаст это очень странный результат:

['\n', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '\n', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '\n', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '\n', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '\n', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '\n', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '\n']

дело в том, что в регулярных выражениях точка означает любой символ. А если хочется прямо настоящую точку, то ее надо обернуть в квадратные скобки вот так

sentences = re.split("[.]", text)
print(sentences)

в квадратных скобках можно прямо перечислять символы, которые мы хотим использовать для разбиения. Получится так:

[
    '\n- Бедные мои ножки! \nКто же вас будет теперь обувать? \nКто натянет на вас чулки и башмаки? \nМне же до вас теперь, мои милые, не достать', 
    ' \nМы будем так далеки друг от друга, что мне будет совсем не до вас',
    '',
    '', 
    ' \nПридется вам обходиться без меня', '\n'
]

уже лучше, правда первое предложение получилось склейкой из предложений с восклицательными и вопросительными знаками.

Помните я говорил что в квадратных скобках можно перечислять символы, так что просто добавим туда ! и ?

sentences = re.split("[.!?]", text)
print(sentences)

проверяем:

[
    '\n- Бедные мои ножки', 
    ' \nКто же вас будет теперь обувать', 
    ' \nКто натянет на вас чулки и башмаки', 
    ' \nМне же до вас теперь, мои милые, не достать', 
    ' \nМы будем так далеки друг от друга, что мне будет совсем не до вас', 
    '', 
    '',
    ' \nПридется вам обходиться без меня',
    '\n'
]

ура, то что надо! =)

Теперь чтобы вывести предложения с четным количеством слов вам надо

  1. в цикле пройти по всем sentences,
  2. каждое предложение разбивать на слова и сохранять в переменную
  3. если количество элементов при делении на 2 даст остаток 0 значит в предложении четное количество слов и можно его выводить