Путь к мастерству: создаём приложение-словарь на Python

12
10481
Добавить в избранное

Хотите стать мастером в Python? Тогда изучайте язык на практике. В этом материале рассказываем, как создать словарь на Python.

Интернет, с одной стороны, открывает доступ к большому объёму информации, но с другой, тормозит развитие. Согласитесь, изучая что-то новое, допустим, язык программирования Python, поиск ценных ресурсов занимает много сил и времени.

Из-за этого новички часто сдаются, переходят к чему-то более простому. Прежде чем мы пойдём дальше, нужно понять, что это не очередная статья из разряда «Как научиться программированию на Python с нуля», а нечто более ценное. За этим материалом последует ещё несколько, в каждом из которых мы покажем, как создаются Python-приложения, параллельно разбираясь с полезными для разработки и анализа данных навыками и инструментами.

Создаём словарь на Python

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

Что будет делать наш словарь на Python? Его задача состоит в том, чтобы выводить на экран определение слова, которое задаст пользователь. В дополнение к этому, если пользователь сделает опечатку при вводе слова, программа предложит наиболее близкое слово, как обычно делает Google − «Вы имели в виду это вместо этого?». Ну а если у слова будет несколько определений, то программа выдаст все. Уже не так просто, правда?

Путь к мастерству: создаём приложение-словарь на Python

Важно! Помимо изучения процесса создания приложения, обратите особое внимание на структуру кода.

Шаг №1 − Данные

Чтобы понимать принцип работы словаря, нужно определить, какие данные он будет использовать для выполнения действий − они представлены в формате JSON. Если вы уже знаете, что такое JSON, не бойтесь пропустить следующие несколько строк. Если же вы впервые услышали это слово или не уверены в своих знаниях, сейчас всё быстро объясним. Рекомендуем взглянуть вот на эти данные, потом мы их и будем использовать − раз и два.

Интересный факт: Каждую секунду генерируется примерно 2 500 000 000 000 000 000 байт данных

JSON, или JavaScript Object Notation, − это формат обмена данными, удобный как компьютерам, так и людям. Обычно он состоит из двух вещей − key и value. Представим, что key − это заброшенная территория, некто вынес постановление о том, что его нельзя использовать для строительства, например, вот это постановление примем за value. Если хотите вникнуть более серьёзно, посмотрите этот материал.

Теперь перейдём к коду. Сначала мы импортируем библиотеку JSON, а затем используем метод загрузки этой библиотеки для работы с нашими данными в формате .json. Важно понимать, что мы загружаем данные из .json формата, но храниться они будут в переменной «data» в виде dict — словаря Python. Если вы незнакомы с dict, можете представить их как хранилище данных.

Как только данные будут загружены, создадим функцию, которая будет принимать слово и искать определение этого слова в данных. Достаточно просто.

Шаг №2 − Проверка на существование слова

Использование оператора if-else поможет вам проверить существует слово или нет. Если слово отсутствует в данных, просто сообщите об этом пользователю − в нашем случае, будет напечатано «Такого слова не существует, пожалуйста, проверьте, не ошиблись ли вы при вводе».

Шаг №3 — Учёт регистра

Каждый пользователь пишет по-своему. Одни пишут только строчными, другие используют ещё и заглавные. Для нас важно сделать так, чтобы результат для всех был одинаковым. Например, результаты по запросам «Rain» и «rain» будут идентичны. Чтобы сделать это, мы собираемся преобразовать слово, введенное пользователем, в строчную запись буквы, потому что наши данные имеют одинаковый формат. Сделать это можно с помощью метода lower() в Python.

Ситуация №1: Чтобы убедиться, что программа возвращает определение слов, начинающихся с заглавной буквы (например, Дели, Техас), мы также проверим наличие заглавных букв в условии else-if.

Ситуация №2: Чтобы убедиться, что программа возвращает определение аббревиатур (например, США, НАТО), мы также проверим прописные буквы.

Теперь словарь на Python может выполнять свою основную функцию − выдавать определение. Идём дальше, поможем пользователю найти слово, если он допустил ошибку при вводе.

Шаг №4 − Поиск близкого слова

Теперь, если пользователь сделал опечатку при вводе слова, вы можете предложить наиболее близкое слово и спросить, имел ли он его в виду. Мы можем сделать это с помощью библиотеки Python difflib. Для этого существует два метода, объясним, как работают оба, а чем пользоваться, выбирайте сами.

Метод 1 − Соответствие последовательности

Сначала мы импортируем библиотеку и извлекаем из нее метод. Функция SequenceMatcher() принимает всего 3 параметра. Первый − junk, что означает, что если в слове есть пробелы или пустые строки, в нашем случае это не так. Второй и третий параметры − это слова, между которыми вы хотите найти сходство. А последний метод выдаст вероятность того, что слово подобрано правильно.

Как видите, сходство между словами «rainn» и «rain» составляет 0,89 или 89%. Это один из способов найти нужное слово. Но в той же библиотеке есть другой метод, который выбирает точное совпадение со словом напрямую, без определения вероятности.

Метод 2 − Получение близких совпадений

Метод работает следующим образом: первый параметр − это слово, для которого вы хотите найти близкие совпадения. Второй параметр − это список слов для сравнения. Третий указывает, сколько совпадений вы хотите в качестве вывода. Вы помните, что мы получили вероятность 0,89 в предыдущем методе? Последний метод использует это число, чтобы узнать, когда прекратить рассматривать слово как близкое совпадение (0,99 — самое близкое к слову). Эту цифру, порог, можно установить самостоятельно.

Самое близкое слово из всех трех − rainy [rainy].

Шаг №5 — Возможно, вы имели в виду это?

Для удобства чтения я просто добавил часть кода if-else. Вы знакомы с первыми двумя утверждениями else-if, теперь разберемся с третьим. Сначала проверяется длина полученных близких совпадений. Функция получения близких совпадений принимает слово, введенное пользователем, в качестве первого параметра, и весь наш набор данных сопоставляется с этим словом. Здесь key − это слова в наших данных, а value − это их определение. [0] в операторе указывает на самое близкое среди всех совпадений.

Да, об этом мы и говорили. Что теперь? Если это то слово, которое имел в виду пользователь, вы должны получить определение этого слова. Об этом далее

Шаг №6 − Получение определения

Ещё один if-else, и вот оно − определение нужного слова.

Шаг №7 − Вишенка на торте

Конечно, это дает нам определение слова «rain», но есть квадратные скобки и выглядит это не очень хорошо. Давайте удалим их и сделаем вид более чистым. Слово «rain» имеет более одного определения, вы заметили? Мы будем повторять вывод таких слов, имеющих более одного определения.

Выглядит намного лучше, не так ли? Ниже прикрепили весь код для справки. Не стесняйтесь изменять и обновлять его по своему усмотрению.

Итого

Заключение

Вот мы и закончили создавать словарь на Python. Изучая одно, вы параллельно изучаете другие вещи, о которых даже не думали. Этот материал научил работе с данными JSON, основными функциями Python, библиотекой difflib и тому, как писать чистый код. Теперь попробуйте создать собственное приложение, с опорой на информацию из этого текста. Как закончите, переходите к новому материалу из цикла.

Понравился материал о том, как создать словарь на Python? Возможно, вас заинтересует следующее:

Источник: Создаём словарь на Python on Towards Data Science

Интересуетесь программированием на Python?

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

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Комментариев: 12

  1. Алексей Смага

    Думаю, что для проверки типа объекта корректнее использовать isinstance(object, classinfo):
    if isinstance(output, list) вместо if type(output) == list.

  2. Данные = json.load (открытое ( «data.json»))
    FileNotFoundError: [Errno 2] Нет такого файла или каталога: ‘data.json’
    как испаравить эту ошибку?? в чем ошибка не пойму

  3. Михаил Снежный

    У меня одного не выполняется условие с «Возможно вы имели ввиду» ?

  4. Алёна Сазанова

    Очень интересные статьи, спасибо!
    Не подскажите, автор использует скобочки для условия и для return, при этом мой PyCharm подчеркивает, что это несоответствие для pep8. Может быть, что-то изменилось в стиле программирования или это просто стиль автора?

    1. Вы (и pep8) правы, скобки здесь совершенно необязательны. Видимо, автор кодил не только на Python, и воспроизводит стиль другого языка.

      1. Алёна Сазанова

        Спасибо за ответ!

  5. Dmitrii Lenivec

    А зачем там проверка на тип, если все значения и так в списках лежат, даже если значение одно как я понял.
    Так же не плохо было бы сказать новичкам что нужно скачать dictionary.json и поставить права просмотра содержимого.
    Ну и ещё не плохо было бы добавить цикл, что бы постоянно не перезапускать программу.

  6. File «map.py», line 5, in
    data = json.load(open(«data.json»))
    FileNotFoundError: [Errno 2] No such file or directory: ‘data.json’
    Нет такого файла или каталога: ‘data.json’

    как исправить ошибку?

    1. Dmitrii Lenivec

      Как я понял, не было упомянуто что нужно скачать файл dictionary.json с предоставленной ссылки: https://www.kaggle.com/borrkk/dictionary/version/1
      Распаковать файл, зайти в консоль в то место где он лежит и написать:
      chmod 644 dictionary.json
      И в коде вместо data.json, логично будет написать имя этого файла.

    2. Здравствуйте. Внимательно перечитайте Шаг №1: http://prntscr.com/m9wqdo 🙂

  7. File «map.py», line 3, in
    data=json.load(open(«data.json»))
    FileNotFoundError: [Errno 2] No such file or directory: ‘data.json’
    Файл «map.py», строка 3, в
    Данные = json.load (открытое ( «data.json»))
    FileNotFoundError: [Errno 2] Нет такого файла или каталога: ‘data.json’
    как испаравить эту ошибку??

    1. Михаил Снежный

      Поменяйте в коде с data.json на dictionary.json, эта ошибка будет исправлена, но появится другая.

Добавить комментарий