$ ./compare.py -h
usage: AntiPlagiat [-h] [-p] [-a] [-n] [-r] [-i] [-d] [-s] [-t] file1 file2
Send me two txt files: first' ' with list of filepaths to check for plagiat an' ' second to save result of my work
positional arguments:
file1 txt file of filepaths with this format:"file plagiat_file" etc.
file2 txt file for results. Previous data in file will be removed ❌
optional arguments:
-h, --help show this help message and exit
-p, --pure Don't pre-process files. Without -p flag I will use my cool ast-base pre-process technologies
-a, --advanced Use Damerau–Levenshtein distance instead of Levenshtein distance
-n, --nice-view Show result in persents instead of fractions
-r , --round-number Round result
-i , --insertion Edit insertion cost. Default 1.0
-d , --deletion Edit deletion cost. Default 1.0
-s , --substitution Edit substitution cost. Default 1.0
-t , --trans Edit transposition cost. Default 1.0. Only for -a flag
You can also combine flags e.g. '-na' equal to '-n -a'
Примеры запросов
python compare.py input.txt score.txt
python compare.py input.txt score.txt -pa
python compare.py input.txt score.txt -a -t 0.5 --nice-view
python compare.py another_input.txt score2.txt -r 3 -n -d 1.2 -i 0.3
Вызов программы
python compare.py
# или
python3 compare.py
# или
./compare.py
Пример файла для входных данных file1
(.txt
тип файла)
files/main.py plagiat1/main.py
files/loss.py plagiat2/loss.py
files/loss.py files/loss.py
Пример файла для выходных данных file2
(.txt
тип файла)
0.3
0.843434
0.1533234234
- Python 3.9+
- Терминал с поддержкой UTF8 и эмодзи
- Библиотека
numpy
pip install -r requirements.txt
Весь код находится в compare.py
так как такое было задание (еще можно было использовать train.py
и model.pkl
). Еще есть папки files
, plagiat1
и
plagiat2
для тестов и пробного использования программы, LICENSE
лицензия, .gitignore
и .git
для работы с git
, .vimspector.json
для дебагера
vimspector, requirements.txt
для внешних библиотек и конечно сам README.md
Реализован с помощью argparse
, который позволяет сделать приложение удобным и с богатым функционалом
Обработка Python файлов c помощью ast
и re
. Удаление всех комментариев, декоративных элементов, пустых строк итд.
С флагом -p
программа не проводит препроцессинг
В базовом режиме используется эта метрика, которая позволяет вычислить схожесть программ/текстов. Вычисление этого расстояния, произоводится с помощью алгоротма Вагнера-Фишера с использования всего двух строк матрицы вместо n (количество символов во втором тексте). Пространственная сложность составляет O(m) вместо O(mn), где m и n длины текстов.
0.0
- абсолютно разные тексты
1.0
- абсолютно одинаковые тексты
Чтобы его вычислить добавьте флаг -a
.
Почти то же самое, что и предыдущая метрика, только учитывает еще транспозиции символов в тексте. Пространственная сложность O(m).
0.0
- абсолютно разные тексты
1.0
- абсолютно одинаковые тексты
Программа умеет еще изменять цену каждой операции (удаление, замена, добавление и транспозиция), красиво выводить результат в разных форматах,
записывать в файл ответы, а под копотом используется ООП, type hints, numpy
, ast
, re
, принципы DRY, EAFP, LYBL и KISS. И конечно много алгоритмов!