Реалізація виявлення плагіату
Детекція плагіату—пошук запозичень з відомого корпусу текстів. Технічна складність визначається масштабом корпусу та типами плагіату: дослівне копіювання виявляється тривіально, перефразоване потребує семантичного порівняння.
Типи плагіату та методи виявлення
| Тип | Опис | Метод |
|---|---|---|
| Дослівне копіювання | Точне збігання фрагментів | Fingerprinting (Rabin-Karp) |
| Косметична модифікація | Заміна синонімів, перестановка слів | N-gram + Jaccard similarity |
| Перефразування | Збереження смислу, інші слова | Semantic similarity (BERT) |
| Міжмовний | Переклад з іншої мови | Cross-lingual embeddings |
Технічний стек
Fingerprinting—найшвидший для точного збігання:
def get_shingles(text: str, k: int = 5) -> set:
words = text.lower().split()
return {tuple(words[i:i+k]) for i in range(len(words)-k+1)}
def jaccard_similarity(s1: set, s2: set) -> float:
return len(s1 & s2) / len(s1 | s2)
Семантичне порівняння (для перефразування):
- Сегментація на речення
- Sentence-BERT embedding для кожного речення
- Матриця косинусної подібності для всіх пар
- Виявлення пар із similarity > 0.85
Масштабування: для корпусу > 1M документів—ANN-пошук через FAISS або Qdrant. Точний попарний пошук не масштабується; ANN знаходить найближчих кандидатів за O(log N).
Інтеграція з зовнішніми сервісами
Для академічних робіт: API Antiplagiat.ru (російський стандарт для ВУЗів), iThenticate (міжнародний). Кастомна система потрібна при вимогах до приватності даних або власному корпусі.
Звітність
Результат: відсоток запозичень + візуалізація збігань (підсвітлення в тексті зі ссилкою на джерело). Поріг флагування: 15–20% для академічних робіт, 30–40% для бізнес-контенту.







