Алгоритм поиска плагиата в наборе документов

Генерализация исходного кода

Задача генерализации исходного кода состоит в минимизации различий между функционально схожими кодами. Документы приводятся к более общему виду, что позволяет в дальнейшем использовать алгоритм поиска и сравнения отпечатков для обнаружения похожих участков программ. Для примера приведем описание генерализации исходного кода для языка Java, однако, данный подход может быть легко адаптирован ко множеству других языков программирования.

Шаги данного алгоритма выполняются строго в порядке их описания.

Для устранения различий между документами с различными комментариями (изменение (1)) все комментарии исключаются из документов.

Для устранения различий между документами с измененными типами возвращаемых значений функций или типов переменных (изменение (3)) все возвращаемые типы функций и типы переменных изменяются по следующим правилам:

  • 1. Все названия целочисленных типов и их классов-оберток (таких как «int», «Integer», «long», «Long», «byte», «Byte», «char», «Character» и др.) меняются на «int».
  • 2. Все названия типов чисел с плавающей точкой и их классов-оберток (такие как «double», «Double», «float», «Float») меняются на «flt».
  • 3. Все остальные названия типов в Java меняются на «ref».

Для устранения различий между документами с измененными названиями переменных и функций (изменение (4)) все названия переменных и функций изменяются по следующим правилам:

  • 1. Все имена функций при вызове и декларации изменяются на «fun».
  • 2. Все объявления переменных с определенным типом изменяются на название этого типа. Пример: строка «int x = 0» на данном этапе изменится на «int = 0», а строка «flt y» изменится на «flt».

Для устранения различий между документами с различным количеством переносов строк, пробелов и отступов (изменение (2)) все переносы строк, пробелы и отступы исключаются из документов.

Для устранения различий между документами с различными строковыми и символьными константами (изменение (5)) проводится замена всех строковых констант на строку «str» и всех констант типа char на строку «chr».

Пример работы алгоритма генерализации исходного кода на участке кода -приведение похожих структур к одинаковым

Рисунок 2. Пример работы алгоритма генерализации исходного кода на участке кода -приведение похожих структур к одинаковым

 
< Пред   СОДЕРЖАНИЕ   Загрузить   След >