Если вы видите этот репозиторий, вы уже знаете, для чего он нужен
- python3.11+ в $PATH
- g++ в $PATH (чтобы использовать clang++, установите переменную CXX в Makefile)
- интернет для скачивания пакетов с pip
- библиотека Qt6+ (установка через менеджер пакетов)
git clone https://github.com/Zdertis420/Hackathon
cd Hackathon
makeпуть для приложения после сборки: $(OBJDIR)/app/hack
по умолчанию $(OBJDIR) = ./build
make VENV=path/to/your/directyory (по умолчанию текущая папка)
make MODE=debug
make run
make remake
make clean
разбирайтесь сами.
разбирайтесь сами.
так как программа использует Shared Object'ы, есть три путя:
- захардкодить путь к библиотеке в питон (не будет портабельно).
- запихнуть libvector.so в системную директорию для динамических библиотек
- запускать с помощью переменных среды вроде
LD_LIBRARY_PATHтретий вариант наиболее адекватен, поэтому мы используем его. так же предоставим скрипты для запуска, доступные в корневой папке репозитория
LD_LIBRARY_PATH=<...>/build/app <...>/hack --help- аргументы командной строки подробно описаны. или./run-hack.sh <аргументы>- только из корневой директории проекта!
LD_LIBRARY_PATH=<...>/build/app <...>hack-ui <путь к конскольному приложению>- не успели убрать костыли или./run-hack-ui.sh- только из корневой директории проекта! аргумент пути предоставляется скриптом.
Hachathon]$ ./run-hach.sh --helpHackathon]$ ./run-hack.sh --task 1 -i data/docs/utf8/ -o ./temp -t data/themes/utf8/Hackathon]$ ./run-hack.sh --task 2 -i temp/docs/output/ -o ./temp/CALCULATED -t temp/themes/output/Hackathon]$ ./run-hack.sh --task 0 -i data/docs/utf8/ -o ./temp/CALCULATED -t data/themes/utf8/
- Разработать алгоритма определения значимости слов: Взять все документы и найти кучу повторяющихся слов паразитов, затем убрать их из документов. Оставшиеся большинство слов в каждом конкретном документе и будут самые значимые слова документа.
- Сформулировать что такое похожие документы, и реализовать функцию сходства: Чем больше документы имеют похожих значимых слов, тем больше документы похожи между собой по теме.
- Разработать алгоритм классификации статей по темам: Похожие ключевые слова = похожие темы
- Интегрировать все части в единое средство классификации.
- Задачa 1: Python3, PyMorphy, CLI (sys.argv - за поснениями к @justanothercatgirl), numpy(???)
- Задача 2:
- Задача 3:
- Задача 4:
- читаем все файлы в оперативку
- убираем знаки препинания и сплитаем и приводим в один регистр, приводим в НАЧАЛЬНУЮ ФОРМУ
- токенизация (хэш-мап, в котором индекс - токен, значение - количество)
- векторизация (представим каждый файл как вектор в N-мерном пр-ве, где N - число слов)
- нормализация всех векторов (xi /= sqrt(xi^2 | i = [0..N])) (делим вектора на их длину)
- смотрим, какие слова имеют примерно одинаковую конц-ию (смотрим по измерениям векторов)
- удаляем незначащие слова (те, которые мы нашли в 5 пункте)
- выводим оставшееся в файл
ВВОД: "Сегодня утром я встал и надел свои сегодняшние или вчерашние носки, я не помню"
- "СЕГОДНЯ УТРО Я ВСТАТЬ И НАДЕТЬ СВОЙ СЕГОДНЯ ИЛИ ВЧЕРА НОСОК Я НЕ ПОМНИТЬ"
- {СЕГОДНЯ: 2, УТРО: 1, Я: 2, ...}
- [2, 1, 2, ...]
- / модуль этого вектора
- лишние: Я, НЕ, И, ИЛИ
- "{СЕГОДНЯ: 2, УТРО: 1, ВСТАТЬ: 1, НАДЕТЬ: 1, НОСОК: 1, ВЧЕРА: 1}"
- эту инфу в файл
- векторизуем+нормализуем данные из файлов, которые получили в 1 задаче
- считаем угол между векторами: это и будет коэффициент сходства
- выводим это в соотв. файлы
- ВВОД: прошлая задача
- анализируем все темы, основываясь на тех же самых принципах
- считаем буквально одну функцию для каждой темы и записываем в файл\
- пользуемся данными из задачи 2 и просто находим тему, с которой имеем макс. сходство
- читаем всё из файла
- буквально находим тему, имеющую максимальное сходство
- profit
это очень важный вопрос, я *** знает как это делать, если у нас логика на питоне помогите мне пожалуйста, я не хочу логику на питонеее аааааааа