Skip to content

Проверка на плагиат с помощью MOSS #10

Description

@markpolyak

Цель

Реализовать модуль, который запускает проверку на плагиат с использованием сервиса MOSS (через библиотеку mosspy), парсит результаты и обновляет Google Таблицу, где хранятся оценки студентов.

Требования

Задание на 3

  • Написать скрипт, который:
    • Загружает index.html с отчётом MOSS по заранее предоставленной ссылке.
    • Извлекает из него пары совпадающих студентов, проценты и количество совпавших строк.
    • Сохраняет результат в results.json (см. ниже).

Задание на 4

Реализовать:

  • Запуск проверки через pymoss.
  • Скачивание index.html.
  • Парсинг совпадений.
  • Обновление Google-таблицы:
    • В нужной ячейке в строке студента создать комментарий с текстом "подозрение на плагиат" в столбце соответствующем лабораторной работе. Если комментарий (-ии) к этой ячейке уже есть, добавить новый комментарий в конец существующей ветки комментариев. Обязательно пометить ячейку залив ее желтым цветом.
    • В столбец "Заимствования" добавить текст вроде "Плагиат ЛР2: совпадение с petrov21 (89%)."

Задание на 5

Помимо задания на 4 дополнительно реализовать два или более пунктов:

  • Использование порога (например, игнорировать совпадения < 50%).
  • Предусмотреть возможность подгрузки в moss результатов выполнения лабораторных работ студентами прошлых лет. Предполагается, что исходный код студентов предыдущих курсов хранится локально, скачивать его из гитхаба не нужно. В случае, если будет найден плагиат между двумя репозиториями студентов прошлых лет - игнорировать. Если плагиат между студентом прошлых лет и нынешним - оставить комментарий и раскрасить ячейку (см. выше) для нынешнего студента, а информацию о студенте одного из прошлых потоков игнорировать, т.к. этого студента нет в текущей гугл-таблице.
  • Поддержка compare50 в виде альтернативного движка для проверки на плагиат.
  • Добавление ссылки на локальный HTML-отчёт, скачанный с помощью pymoss.

Архитектура

Использовать шаблон «Стратегия».
Определить абстрактный интерфейс PlagiarismChecker и создать реализацию для MossChecker.

Пример (перечень входных и выходных аргументов можно менять):

from abc import ABC, abstractmethod

class PlagiarismChecker(ABC):
    def __init__(self, lab_id: str, language: str):
        self.lab_id = lab_id
        self.language = language

    @abstractmethod
    def run_check(self) -> str:
        """Запускает проверку, возвращает путь к отчёту"""

    @abstractmethod
    def parse_results(self, report_path: str) -> list[dict]:
        """Извлекает пары совпадений"""

Содержимое results.json, который должен генерироваться в случае выполнения задания на 3:

[
  {
    "student1": "ivanov-dev",
    "student2": "petrov21",
    "match1": "89%",
    "match2": "87%",
    "lines": 56,
    "lab_id": "ЛР2"
  },
  {
    "student1": "sidorov-a",
    "student2": "ivanov-dev",
    "match1": "65%",
    "match2": "64%",
    "lines": 33,
    "lab_id": "ЛР2"
  }
]

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions