Введение 3
Глава 1. Анализ алгоритмов поиска плагиата 5
§1.1. Проблема плагиата 5
§1.2. Описание методов выявления плагиата 9
§1.3. Анализ существующих решений 16
§1.4. Требования к решению 18
Глава 2. Построение модели 21
§2.1. Абстрактное синтаксическое дерево 21
§2.2. Идея решения 23
§2.3. Векторное представление 25
§2.4. Долговременная краткосрочная память 30
§2.5. Процесс классификации 34
Глава 3. Численные эксперименты 37
§3.1. Программная реализация 37
§3.2. Исходные данные 40
§3.3. Оценка модели 41
§3.4. Сравнение с аналогами 45
Заключение 49
Список литературы 50
Приложение
На протяжении веков была весьма актуальна проблема заимствования различных авторских произведений искусства, достижений науки, технических решений или изобретений.
Студенческий плагиат является одной из серьезных проблем образовательных учреждений [22]. Заимствованные фрагменты или даже полностью работы могут встречаться как в лабораторных работах, курсовых проектах, так и дипломных работах.
Однако, как быть, если результат работы представлен в виде программ на языках программирования высокого уровня? Ведь, исходные коды обладают собственной спецификой, так как изменение имен переменных или внесение дополнительных комментариев в код программы не влияют на выполнение программы, но при этом изменяют его текстовую составляющую. Следовательно, методики выявления заимствований в текстах на естественных языках неприменимы напрямую к текстам исходных кодов программ и необходимо расценивать исходный код с точки зрения синтаксического анализа.
Применение разрабатываемой системы (проверки идентичности исходных текстов программ) довольно многогранно. Одним из способов применения такой системы является обнаружение плагиата в исходных кодах программ. Данная задача является актуальной не только в коммерческой сфере, где идет серьезная борьба за интеллектуальную собственность, но и в сфере образования, где плагиат в студенческих работах является одной из основных проблем образовательных учреждений.
Целью данной работы является разработка системы проверки идентичности исходных текстов программ, которая могла бы выявлять случаи "списывания" программ, автоматически сравнивать исходные тексты и позволяла находить похожие или идентичные фрагменты в исходных кодах программ, оценивать степень обнаруженного сходства и наглядно представлять результат сравнения.
Для достижения указанной цели был поставлен ряд основных задач:
• Изучить существующие методики выявления заимствований, аналогичные решения.
• Построение синтаксического дерева для предложенного решения.
• Создание словаря, построение контекстных пар.
• Обучение модели, способной определить являются ли два текста программы схожими.
• Провести оценку модели и сравнительный анализ со существующими решениями.
Таким образом, в процессе выполнения работы были выполнены основные цели и задачи.
В ходе выполнения данной работы было разработано программное обеспечение, которое позволит выявлять случаи "списывания" программ, автоматически сравнивать исходные тексты и позволяла находить похожие или идентичные фрагменты в исходных кодах программ, оценивать степень обнаруженного сходства и наглядно представлять результат сравнения.
Для достижения указанно цели были:
• исследованы существующие методики выявления заимствований исходного кода программ.
• рассмотрены различные типы изменений, вносимых в заимствованный исходный код, с целью сокрытия факта заимствования.
• построены представления исходного кода в виде абстрактного синтаксического дерева.
• выполнена проверка эффективности данного подхода по определению сходства. Проверка проводилась на наборе реальных студенческих проектов, представляющих решения практических заданий.