Я работаю над групповым проектом для моего университета, который будет использоваться для обнаружения плагиата в компьютерных науках.
Моя группа в основном отказывается от методов хеширования / дактилоскопии, описанных в этой журнальной статье: Заведение: локальные алгоритмы дактилоскопии документов . Это очень похоже на работу системы обнаружения плагиата MOSS .
В основном мы берем k-граммы хэшей исходного кода сокурсников и ищем их в базе данных для соответствующих совпадений (наряду с большим количеством оптимизации в том, как мы определяем, какие хэши выбрать в качестве отпечатков пальцев документа).
Первым аспектом нашего проекта является его часть "Front-End", которая содержит некоторые семантические знания о каждом формате файлов, который может обрабатывать наша система обнаружения. Это позволит нам убрать некоторые детали из документа, который нам больше не нужен с целью обнаружения плагиата. По сути, мы хотим иметь возможность переименовывать все переменные в разных языках программирования в постоянную строку или букву.
Что такое облегченное решение (генератор лексеров или что-то подобное), которое мы можем использовать, чтобы помочь переименовать все переменные в файлах исходного кода на разных языках в константы?
Наш проект написан на Java.
В идеале я просто хотел бы иметь возможность определить грамматику для каждого языка, и тогда наш интерфейс сможет переименовать все идентификаторы в исходном файле этих языков в некоторую константу. Затем мы сделаем это для каждого формата файла, который мы хотим поддерживать (java, c ++, python и т. Д.).