ИнфоКомпас — это виртуальный помощник, разработанный для помощи пользователям в поиске информации из различных источников, таких как PDF-документы и Excel-таблицы, с использованием метода TF-IDF (Term Frequency-Inverse Document Frequency) для анализа текста и поиска наиболее релевантных ответов.
Функция load_excel_data(excel_path) загружает данные из Excel-файла, который содержит вопросы и ответы. Эти данные используются для поиска ответов на основе введенных пользователем вопросов.
Функция load_links_data(links_path) загружает данные из файла links.xlsx, который содержит вопросы и связанные с ними ссылки. Эти данные используются для предоставления пользователю дополнительных ресурсов, связанных с их запросом.
Функция extract_text_and_pages_from_pdf(pdf_path) извлекает текст и номера страниц из PDF-документа. Этот текст используется для поиска ответов на основе введенных пользователем вопросов.
Функция split_text_into_paragraphs(text_and_pages) разделяет текст на абзацы и сохраняет номера страниц, с которых эти абзацы были извлечены.
Функция create_tfidf_matrix(paragraphs) создает TF-IDF матрицу на основе абзацев текста. Эта матрица используется для вычисления сходства между введенными пользователем вопросами и текстом в документах.
Функция find_best_answer(user_question, vectorizer, tfidf_matrix, paragraphs, pages, threshold) находит наиболее релевантный ответ на основе введенного пользователем вопроса, используя TF-IDF матрицу и пороговое значение сходства.
Функция preprocess_answer(answer) предварительно обрабатывает ответ, удаляя ненужные части текста. Функция format_answer(answer) форматирует ответ для отображения в интерфейсе.
Функция preprocess_text(text) обрабатывает текст, приводя его к нижнему регистру, удаляя специальные символы и выполняя стемминг.
Функция find_relevant_links(user_question, threshold) находит релевантные ссылки на основе введенного пользователем вопроса и порогового значения сходства.
При нажатии на кнопку ссылки, вопрос, связанный с этой ссылкой, отправляется на сервер для поиска ответа, и ссылка открывается в новом окне. Это позволяет пользователю получить дополнительную информацию, связанную с их запросом.
Функция check_like_count() проверяет количество лайков в базе данных. Если количество лайков превышает определенный порог, модель автоматически переобучается.
Функция retrain_model() загружает данные обратной связи из базы данных, обрабатывает их и создает новую TF-IDF матрицу на основе этих данных.
Планировщик задач настроен на автоматическую проверку количества лайков и переобучение модели каждые 30 минут.
Для установки и запуска ИнфоКомпас, следуйте этим простым шагам:
-
Клонируйте репозиторий: git clone https://github.com/Vikkingsk8/Chat_bot_InfoCompas.git cd Chat_bot_InfoCompas
-
Установите зависимости: pip install -r requirements.txt
-
Запустите приложение: python app.py
Откройте ваш любимый браузер и перейдите по адресу http://127.0.0.1:5000/.
Введите ваш вопрос в поле ввода и нажмите кнопку "Отправить".
Если вы обновили данные в файлах Excel или PDF, не забудьте перезапустить приложение, так как ИнфоКомпас использует механизм кэширования для улучшения производительности.
Для запуска тестов используйте следующую команду:
python tests.py
test_index_route: Проверяет, что главная страница возвращает статус-код 200.
test_chat_endpoint: Проверяет корректность обработки запроса к чат-боту.
test_chat_endpoint_invalid_question: Проверяет обработку некорректного ввода пользователя.
test_chat_endpoint_unknown_question: Проверяет обработку случая, когда ответ на вопрос не найден.
test_download_pdf_endpoint: Проверяет корректность работы маршрута для скачивания PDF-файла.
test_load_excel_data: Проверяет корректность загрузки данных из Excel-файла.
test_load_excel_data_nonexistent_file: Проверяет обработку случая, когда файл не найден.
test_load_excel_data_invalid_file: Проверяет обработку случая, когда файл имеет неправильный формат.
test_preprocess_text: Проверяет корректность предварительной обработки текста.
test_preprocess_text_empty: Проверяет обработку пустого ввода.
test_preprocess_text_with_extra_chars: Проверяет обработку текста с неалфавитными символами.
test_find_answer_in_excel: Проверяет корректность поиска ответа в Excel-файле.
test_find_answer_in_pdf: Проверяет корректность поиска ответа в PDF-файле.
test_format_answer: Проверяет корректность форматирования ответа для отображения в HTML.
test_extract_text_and_pages_from_pdf: Проверяет корректность извлечения текста и номеров страниц из PDF-файла.
app.py: Основной файл приложения.
requirements.txt: Файл с зависимостями.
README.md: Документация проекта.
tests.py: Файл с тестами.
data/: Папка с данными, содержит instruction.pdf и ответы.xlsx и cache.pkl
static/: Папка для статических CSS файлов и изображений.
styles.css: Основной CSS файл.
templates/: Папка для HTML шаблонов.
index.html: Основной HTML файл.
Infokompas/
├── app.py
├── requirements.txt
├── README.md
├── tests.py
├── data/
│ ├── instruction.pdf
│ ├── ответы.xlsx
│ ├── links.xlsx
│ └── cache.pkl
├── static/
│ └── styles.css
│ ├── background.jpg
│ ├── bot_icon.png
│ ├── image.png
│ └── user_icon.png
└── templates/
└── index.html
ИнфоКомпас — это мощный инструмент для поиска информации, который использует современные методы обработки текста и машинного обучения для предоставления пользователям наиболее релевантных ответов и ссылок. Благодаря автоматическому переобучению и интеграции с различными источниками данных, ИнфоКомпас обеспечивает высокую точность и эффективность в работе.
- Ермилов В.В. (разработчик)
- Файбисович В.А. (аналитик)