▎1. Структура проекта
Создайте структуру папок для вашего проекта:
search_engine/
│
├── config.json # Конфигурационный файл
├── requests.json # Файл с запросами
├── answers.json # Файл с ответами
├── index.py # Основной файл с логикой поискового движка
└── documents/ # Папка с документами для индексации
▎2. Конфигурационный файл (config.json)
Пример содержимого config.json:
{
"files": [
"documents/doc1.txt",
"documents/doc2.txt",
"documents/doc3.txt"
],
"max_results": 10
}
▎3. Индексация файлов
В файле index.py напишите функцию для индексации документов:
import json
import os
class SearchEngine:
def __init__(self, config_file):
with open(config_file, 'r') as f:
self.config = json.load(f)
self.index = {}
self.index_documents()
def index_documents(self):
for file_path in self.config['files']:
with open(file_path, 'r') as f:
content =
f.read ()
words = content.split()
for word in words:
word = word.lower()
if word not in self.index:
self.index[word] = []
self.index[word].append(file_path)
def search(self, query):
words = query.lower().split()
results = set(self.index.get(words[0], []))
for word in words[1:]:
results.intersection_update(set(self.index.get(word, [])))
return list(results)[:self.config['max_results']]
def main():
engine = SearchEngine('config.json')
with open('requests.json', 'r') as f:
requests = json.load(f)
results = {}
for request in requests['queries']:
results[request] =
engine.search (request)
with open('answers.json', 'w') as f:
json.dump(results, f, indent=4)
if __name__ == "__main__":
main()
▎4. Файл с запросами (requests.json)
Пример содержимого requests.json:
{
"queries": [
"example query",
"another search term"
]
}
▎5. Результаты поиска
После выполнения программы результаты поиска будут записаны в answers.json в следующем формате:
{
"example query": ["documents/doc1.txt", "documents/doc2.txt"],
"another search term": ["documents/doc3.txt"]
}
▎6. Запуск программы
Для запуска программы просто выполните:
python index.py
▎7. Возможные улучшения
- Сложные алгоритмы ранжирования: Реализуйте более сложные алгоритмы для определения релевантности (например, TF-IDF).
- Поддержка различных форматов файлов: Добавьте возможность индексировать PDF или DOCX.
- Интерфейс командной строки: Добавьте интерфейс для ввода запросов через консоль.
- Кэширование результатов: Реализуйте кэширование для ускорения поиска
файлам
Перед вами подробное описание будущего проекта, который станет отличным
дополнением вашего портфолио. Здесь есть всё, что вам нужно, чтобы справиться с
поставленной задачей.
Описание задачи
Представьте, что вы пришли в отдел разработки программного обеспечения недавно
созданного информационно-новостного портала, на котором каждый день выходят
новости о событиях в мире и статьи разных авторов. Руководитель поручил вам
реализацию собственного поискового движка, который поможет осуществлять поиск
среди набора документов.
Существующие поисковые движки ваши коллеги уже попробовали. Лучшим из них был
ресурс от Яндекса, который можно было установить на своём сервере и использовать
для поиска по своему набору документов. Но он перестал существовать как отдельный
сервис. Ваше руководство решило реализовать собственный поиск, алгоритм и
принципы работы которого при необходимости можно менять и развивать.
Поисковый движок должен представлять из себя консольное приложение
(исполняемый файл, запускаемый на любом сервере или компьютере),
осуществляющее поиск и имеющее возможность настройки через файлы формата
JSON. Применённые в нём решения можно впоследствии встроить в поисковый
движок работающий на веб.
Принципы работы поискового движка должны быть следующими:
1. В конфигурационном файле перед запуском приложения задаются названия
файлов, по которым движок будет осуществлять поиск.2. Поисковый движок должен самостоятельно обходить все файлы и
индексировать их так, чтобы потом по любому поисковому запросу находить наиболее
релевантные документы.
3. Пользователь задаёт запрос через JSON-файл requests.json. Запрос — это
набор слов, по которым нужно найти документы.
4. Запрос трансформируется в список слов.
5. В индексе ищутся те документы, на которых встречаются все эти слова.
6. Результаты поиска ранжируются, сортируются и отдаются пользователю,
максимальное количество возможных документов в ответе задаётся в
конфигурационном файле.
7. В конце программа формирует файл answers.json, в который записывает
результаты поиска.
***