Обработка текстовых данных¶
Цель этого занятия — разработать несколько приложений, предполагающих обработку текстов. В начале вам предлагается набор функций для повторения, которые помогут вам в решении задачи. Вспомните предложенные функции, опробуйте их в интерпретаторе.
Функции для повторения¶
-
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¶
По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы не чиатем кдаужю бкуву по отдльенотси, а все солво цликеом.
Разработайте приложение, которое принимает на вход текстовый файл с обычным текстом и выводит этот же текст, но с перемешанными буквами внутри слов. Первая и последняя буквы каждого слова должны остаться на своих местах.
Для работы с файлом используйте менеджер контекста.
Примеры входных текстов.
Начало повести Айзека Азимова «Профессия»:
Джордж Плейтен сказал с плохо скрытой тоской в голосе: - Завтра первое мая. Начало Олимпиады!
Он перевернулся на живот и через спинку кровати пристально посмотрел на своего товарища по комнате. Неужели он не чувствует того же? Неужели мысль об Олимпиаде совсем его не трогает?
У Джорджа было худое лицо, черты которого еще более обострились за те полтора года, которые он провел в приюте. Он был худощав, но в его синих глазах горел прежний неуемный огонь, а в том, как он сейчас вцепился пальцами в одеяло, было что-то от затравленного зверя.
Его сосед по комнате на мгновение оторвался от книги и заодно отрегулировал силу свечения стены, у которой сидел. Его звали Хали Омани, он был нигерийцем. Темно-коричневая кожа и крупные черты лица Хали Омани, казалось, были созданы для того, чтобы выражать только одно спокойствие, и упоминание об Олимпиаде нисколько его не взволновало.
Текст из начала задания с восстановленным порядком букв:
По результатам исследований одного английского университета, не имеет значения, в каком порядке расположены буквы в слове. Главное, чтобы первая и последняя буквы были на месте. Остальные буквы могут следовать в полном беспорядке, все равно текст читается без проблем. Причиной этого является то, что мы не читаем каждую букву по отдельности, а все слово целиком.
Домашнее задание¶
Реализуйте приложение «наборщик». Процесс игры:
При старте приложение запрашивает некоторое слово.
Игроки ходят по очереди. Каждый игрок пытается составить новое слово из букв, входящих в исходное слово. Слова не должны повторяться.
После хода одного игрока, второму игроку задается вопрос: является ли вариант предыдущего игрока словом. Если второй игрок отвечает отрицательно, то ходить снова должен первый игрок.
Чтобы сдаться, игрок вводит символ
#.
Пример игровой сессии:
Enter word: world
P1> old
P2, is it a word? [yn]: y
P2> rd
P1, is it a word? [yn]: n
P2> #
Winner: P1