Приложение ищет слова из словаря, в которых есть заданная подстрока
Вы можете использовать виртуальное окружение, если хотите изолировать библиотеки, используемые в приложении от системных.
- Установите нужные библиотеки:
python -m pip install -r requirements.txt
- Запустите приложение:
python searcher.py
При запуске показывается окно для ввода текста и список результатов. Для выхода нужно нажать Ctrl-C
.
При вводе подстроки в окне приложения появляются те слова из словаря, в которых есть эта подстрока. Подстрока подсвечена зелёным; если же приложение ошибочно выдаёт слово, в котором нет подстроки, оно показывается красным и зачёркнутым.
Результаты можно прокручивать мышью.
Попробуйте ввести test
, чтобы увидеть, как это работает.
Приложение состоит из двух файлов: searcher.py
, отвечающий за само отображение, и sset.py
, в котором находится структура данных для поиска по строкам.
В файле searcher.py
вы можете менять только константу FILENAME
Файл sset.py
вы можете менять как угодно, но сигнатуры методов класса SSet
должны остаться неизменными:
- Конструктор
__init__(self, filename)
принимает имя файла, в котором находится словарь. - Метод
load(self)
загружает все слова из словаря. Предполагается, что в словаря каждая строка содержит одно слово. Словарь не обязательно отсортирован в алфавитном порядке. - Метод
search(self, substring)
возвращает все слова из словаря, которые содержат заданную подстрокуsubstring
.
Сейчас структура SSet
просто хранит список всех слов и ищет подстроки в каждом слове каждый раз. Кроме того, в реализации есть ошибка и добавляется лишнее слово some wrong word!
.
Реализовать структуру данных SSet
корректно и эффективно.
Для этого реализуйте суффиксное дерево. Если строка содержит подстроку, то подстрока будет префиксом какого-либо суффикса.
Файл small-words.txt
содержит 15920 пятибуквенных слов и используется с неэффективной структурой.
Файл words.txt
из 370105 слов нужно использовать для проверки эффективной структуры.
Критерии оценки:
- программа выдаёт суффиксы, которые действительно есть в тексте; программа не выдаёт суффиксов, которых в тексте нет;
- программа использует суффиксное дерево;
- нет заметного лага при использовании на словаре words.txt при поиске подстрок длиной более трёх символов.