Обработка текстовых данных

Цель этого занятия — разработать несколько приложений, предполагающих обработку текстов. В начале вам предлагается набор функций для повторения, которые помогут вам в решении задачи. Вспомните предложенные функции, опробуйте их в интерпретаторе.

Функции для повторения

str.split()

Метод возвращает список слов в строке. Словом считается последовательность непробельных символов:

>>> '1 2 3'.split()
['1', '2', '3']
str.join(iterable)

Возвращает сроку, которая является конкатенацией строк из iterable. Строка, у которой вызван метод, становится разделителем.

str.isalpha()

Возвращает True, если все символы в строке — буквы.

sorted(iterable)

Возвращает новый отсортированный список, состоящий из элементов последовательности iterable.

Для примера в методах словарей используется словарь d = {'Name': 'John', 'Last Name': Connor}.

d.keys()

Получение списка всех ключей

>>> d.keys()
dict_keys(['Name', 'Last Name'])
d.values()

Получение списка всех значений в словаре

>>> d.values()
dict_values(['John', 'Connor'])
d.items()

Получение списка пар ключ-значение, представленных в виде кортежей:

>>> d.items()
dict_items([('Name', 'John'), ('Last Name', 'Connor')])
key in dict

Возвращает True, если ключ есть в словаре:

>>> 'Name' in d:
True
random.shuffle(seq)

Перемешивает последовательность seq.

open(file_path, mode='r')

Открыть файл file_path в режиме mode. Функция возвращает file object. Полная сигнатура функции приведена в официальной документации: open. Режим может принимать значения:

  • 'r'read, чтение

  • 'w'write, запись

f.write(text)

Записать строку text в файл.

f.close()

Закрыть файл f.

Пример работы с файлом:

# Открываем файл для чтения
in_file = open('data.txt', 'r')

# Файл — итерируемый объект. Следовательно, для
# его построчного чтения можно использовать цикл for
for line in in_file:
    print(f'Got line: {line}')

in_file.close()

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

# Открытие файла. Файл будет закрыт при выходе из блока with.
with open('data.txt', 'r') as in_file:
    for line in in_file:
        print(f'Got line: {line}')

Упражнение

В модуле string определена строка, содержащая символы английского алфавита: string.ascii_lowercase. Используя эту строку, создайте словарь со следующей структурой:

{
    'vowels': ['a', 'e', 'i', 'o', 'u'],
    'consonants': ['b', 'c', 'd', ...]
}

Задание 1

Разработайте приложение для поиска анаграмм в тексте. На входе у приложения текстовый файл, на выходе — списки анаграмм.

Пример входного текста:

Аз есмь строка, живу я, мерой остр.
За семь морей ростка я вижу рост.
Я в мире — сирота.
Я в Риме — Ариост.

Вывод (каждая строка содержит анаграммы):

['Аз', 'За']
['есмь', 'семь']
['строка', 'ростка']
['живу', 'вижу']
['я', 'я', 'Я', 'Я']
['мерой', 'морей']
['остр', 'рост']
['в', 'в']
['мире', 'Риме']
['сирота', 'Ариост']

Задание 2

По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы не чиатем кдаужю бкуву по отдльенотси, а все солво цликеом.

Разработайте приложение, которое принимает на вход текстовый файл с обычным текстом и выводит этот же текст, но с перемешанными буквами внутри слов. Первая и последняя буквы каждого слова должны остаться на своих местах.

Для работы с файлом используйте менеджер контекста.

Примеры входных текстов.

Начало повести Айзека Азимова «Профессия»:

Джордж Плейтен сказал с плохо скрытой тоской в голосе: - Завтра первое мая. Начало Олимпиады!

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

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

Его сосед по комнате на мгновение оторвался от книги и заодно отрегулировал силу свечения стены, у которой сидел. Его звали Хали Омани, он был нигерийцем. Темно-коричневая кожа и крупные черты лица Хали Омани, казалось, были созданы для того, чтобы выражать только одно спокойствие, и упоминание об Олимпиаде нисколько его не взволновало.

Текст из начала задания с восстановленным порядком букв:

По результатам исследований одного английского университета, не имеет значения, в каком порядке расположены буквы в слове. Главное, чтобы первая и последняя буквы были на месте. Остальные буквы могут следовать в полном беспорядке, все равно текст читается без проблем. Причиной этого является то, что мы не читаем каждую букву по отдельности, а все слово целиком.

Домашнее задание

Реализуйте приложение «наборщик». Процесс игры:

  1. При старте приложение запрашивает некоторое слово.

  2. Игроки ходят по очереди. Каждый игрок пытается составить новое слово из букв, входящих в исходное слово. Слова не должны повторяться.

  3. После хода одного игрока, второму игроку задается вопрос: является ли вариант предыдущего игрока словом. Если второй игрок отвечает отрицательно, то ходить снова должен первый игрок.

  4. Чтобы сдаться, игрок вводит символ #.

Пример игровой сессии:

Enter word: world
P1> old
P2, is it a word? [yn]: y
P2> rd
P1, is it a word? [yn]: n
P2> #
Winner: P1