Skip to content

Zdertis420/Hackathon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Что это?

Если вы видите этот репозиторий, вы уже знаете, для чего он нужен

Шаги сборки

Требования для сборки:

  • python3.11+ в $PATH
  • g++ в $PATH (чтобы использовать clang++, установите переменную CXX в Makefile)
  • интернет для скачивания пакетов с pip
  • библиотека Qt6+ (установка через менеджер пакетов)

Linux:

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

Windows

разбирайтесь сами.

Mac:

разбирайтесь сами.

Запуск

так как программа использует Shared Object'ы, есть три путя:

  1. захардкодить путь к библиотеке в питон (не будет портабельно).
  2. запихнуть libvector.so в системную директорию для динамических библиотек
  3. запускать с помощью переменных среды вроде LD_LIBRARY_PATH третий вариант наиболее адекватен, поэтому мы используем его. так же предоставим скрипты для запуска, доступные в корневой папке репозитория

CLI

  • LD_LIBRARY_PATH=<...>/build/app <...>/hack --help - аргументы командной строки подробно описаны. или
  • ./run-hack.sh <аргументы> - только из корневой директории проекта!

GUI

  • LD_LIBRARY_PATH=<...>/build/app <...>hack-ui <путь к конскольному приложению> - не успели убрать костыли или
  • ./run-hack-ui.sh - только из корневой директории проекта! аргумент пути предоставляется скриптом.

примеры использования

  • Hachathon]$ ./run-hach.sh --help
  • Hackathon]$ ./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/

Заметки из старого README, уже неактуально

Что нужно сделать?

  1. Разработать алгоритма определения значимости слов: Взять все документы и найти кучу повторяющихся слов паразитов, затем убрать их из документов. Оставшиеся большинство слов в каждом конкретном документе и будут самые значимые слова документа.
  2. Сформулировать что такое похожие документы, и реализовать функцию сходства: Чем больше документы имеют похожих значимых слов, тем больше документы похожи между собой по теме.
  3. Разработать алгоритм классификации статей по темам: Похожие ключевые слова = похожие темы
  4. Интегрировать все части в единое средство классификации.

Инструменты

  • Задачa 1: Python3, PyMorphy, CLI (sys.argv - за поснениями к @justanothercatgirl), numpy(???)
  • Задача 2:
  • Задача 3:
  • Задача 4:

Как мы будем это делать??

Задача 1

  1. читаем все файлы в оперативку
  2. убираем знаки препинания и сплитаем и приводим в один регистр, приводим в НАЧАЛЬНУЮ ФОРМУ
  3. токенизация (хэш-мап, в котором индекс - токен, значение - количество)
  4. векторизация (представим каждый файл как вектор в N-мерном пр-ве, где N - число слов)
  5. нормализация всех векторов (xi /= sqrt(xi^2 | i = [0..N])) (делим вектора на их длину)
  6. смотрим, какие слова имеют примерно одинаковую конц-ию (смотрим по измерениям векторов)
  7. удаляем незначащие слова (те, которые мы нашли в 5 пункте)
  8. выводим оставшееся в файл

Пример:

ВВОД: "Сегодня утром я встал и надел свои сегодняшние или вчерашние носки, я не помню"

  1. "СЕГОДНЯ УТРО Я ВСТАТЬ И НАДЕТЬ СВОЙ СЕГОДНЯ ИЛИ ВЧЕРА НОСОК Я НЕ ПОМНИТЬ"
  2. {СЕГОДНЯ: 2, УТРО: 1, Я: 2, ...}
  3. [2, 1, 2, ...]
  4. / модуль этого вектора
  5. лишние: Я, НЕ, И, ИЛИ
  6. "{СЕГОДНЯ: 2, УТРО: 1, ВСТАТЬ: 1, НАДЕТЬ: 1, НОСОК: 1, ВЧЕРА: 1}"
  7. эту инфу в файл

Задача 2

  1. векторизуем+нормализуем данные из файлов, которые получили в 1 задаче
  2. считаем угол между векторами: это и будет коэффициент сходства
  3. выводим это в соотв. файлы

Пример:

  1. ВВОД: прошлая задача
  2. анализируем все темы, основываясь на тех же самых принципах
  3. считаем буквально одну функцию для каждой темы и записываем в файл\

Задача 3:

  1. пользуемся данными из задачи 2 и просто находим тему, с которой имеем макс. сходство

Пример:

  1. читаем всё из файла
  2. буквально находим тему, имеющую максимальное сходство
  3. profit

Задача 4: интерфейс

это очень важный вопрос, я *** знает как это делать, если у нас логика на питоне помогите мне пожалуйста, я не хочу логику на питонеее аааааааа

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5