проверка кода на плагиат

Проверка кода на плагиат

Антиплагиат онлайн на Text.ru позволяет проверить текст совершенно бесплатно.

Эффективные алгоритмы антиплагиата онлайн делают проверку глубокой и качественной.

Процедура проверки на плагиат проста: всего несколько кликов — и вы узнаете процент уникальности текста. Если в сети есть дубликаты текстов, они обязательно найдутся. Вы также можете проверить текст на ошибки с помощью сервиса проверки орфографии.

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

Обращаем ваше внимание, что теперь на на Text.ru можно проверить уникальность текста внутри платформы Яндекс.Дзен. Для этого поставьте галочку в строке “Проверка по Яндекс.Дзен”.

На сервисе Text.ru работает алгоритм проверки текстов на уникальность, выполняющий анализ текстов по усовершенствованной методике. Чтобы ваша работа с сервисом проверки была прозрачной и комфортной, мы дадим некоторые рекомендации по взаимодействию с актуальным алгоритмом.

Какие тексты «не любит» алгоритм

Данный алгоритм проверки текста на плагиат онлайн принципиально отличается от проверки методом шинглов. Какие последствия это имеет для работы с текстами?

Таким образом, наш бесплатный антиплагиат онлайн подсвечивает совпадения наиболее точно и полно.

Какие тексты «любит» алгоритм

Чтобы достичь 100% уникальности при рерайтинге, необходимо выполнить качественную переработку текста.

Сделаем алгоритм ещё внимательнее!

Источник

Обнаружить в тексте «воду» и рерайт «Википедии»: 5 бесплатных антиплагиат-сервисов

У меня два сайта — они регулярно наполняются новыми публикациями, которые нужно проверять на уникальность.

У меня под рукой всегда несколько бесплатных сервисов для проверки текста: у каждого есть свои особенности, поэтому одного часто бывает недостаточно. В этой статье я поделюсь опытом их использования и покажу на примере, как отличается оценка текстов разными алгоритмами.

Ключевые понятия

Чтобы выбрать подходящий сервис проверки текста, нужно научиться разговаривать с ними на одном языке. Расскажу об основных терминах, которые помогают разобраться в особенностях работы алгоритмов.

Уникальность указывает на пересечения текста с материалами других сайтов: с помощью этой характеристики можно узнать, какой объем текста больше нигде не встречается в интернете.

Важная деталь: при каждой новой проверке процент уникальности одного и того же текста может разниться. Разработчики объясняют это статистической погрешностью и с разницей в ответах поисковых систем на одни и те же запросы.

Шинглование — алгоритм проверки уникальности. Весь текст делится на равные шинглы — фрагменты от 2 до 7 слов, — и сервис сравнивает их со всеми проиндексированными сайтами в интернете. На некоторых сайтах можно настроить длину шингла, от которой и зависит суммарный процент уникальности всего текста.

Рерайт — искусственно переписанный текст: например, вместо «3 октября правительство изменило противопожарные правила» можно написать «3 октября 2019 года на государственном уровне были изменены противопожарные правила, вызвавшие большое волнение в обществе».

Рерайт не является ценным: поисковики умеют его распознавать, а читатели замечают подвох. Некоторые сервисы умеют не только находить точно такие же тексты в интернете, но и определять рерайт.

SEO-параметры. Удобно, если сервис оценивает не только уникальность, но и технические параметры текста. Например, определяет процент «воды» или «тошноты» — то есть находит слова, которые не несут никакой смысловой нагрузки или слишком часто повторяются.

Домены-исключения — сайты, совпадения с которыми учитываться не будут: некоторые сервисы предлагают настроить такую опцию.

Массовая проверка — возможность одновременно проверять несколько разных текстов: это экономит время, если работаешь с большим количеством авторов.

Вот сервисы, которыми я обычно пользуюсь: расскажу, чем они полезны и как могут дополнить работу друг друга.

Как победить выгорание

Advego Plagiatus

Платформы: десктоп-версия, браузер
Максимальная длина текста при бесплатной проверке: в десктопной версии — без ограничений, в браузере — 25 000 символов
Платные тарифы: после превышения ограничения — 1 Р за 1667 символов

По моему опыту, это один из лучших сервисов проверки уникальности: Advego Plagiatus находит даже спрятанный или хорошо переписанный рерайт. А вот проверять им слишком короткие тексты не рекомендую: алгоритм ошибочно учитывает штампы и устойчивые выражения и обязательно найдет множество источников заимствования.

В браузерной версии сервис предлагает меньше возможностей, чем в десктопной. Если хочется вручную настраивать шинглы и проверять большие тексты, придется скачивать программу: онлайн-версия позволяет проверить максимум 95 000 символов за раз. В десктоп-клиенте нет ограничений по объему проверяемого текста, но за одну проверку вам придется расшифровать несколько капч.

Скорость проверки текста одинаковая: сервис определит процент уникальности любого текста за несколько минут.

Text.ru

Платформы: браузер, телеграм-бот
Максимальная длина текста при бесплатной проверке: 15 000 символов
Платные тарифы: от 15 Р в день — цены различаются в зависимости от срока подписки и объема текста, который можно проверить в течение дня

Сервис проверяет тексты с помощью оригинального алгоритма: он работает без шинглования, поэтому хорошо определяет рерайт любой глубины и знает основные приемы, с помощью которых авторы обычно обманывают проверку на антиплагиат. Мусорными словами, перестановкой абзацев, изменением падежей, склонений и форм слов его не провести.

Еще сервис умеет оценивать SEO-параметры текста: например, может найти поисковые ключи и проверить, не слишком ли их много, или обнаружить бессмысленные конструкции, которыми автор искусственно увеличил объем материала. Текст можно отредактировать прямо в окне проверки — в других сервисах такое встречается не всегда.

Читайте также:  нар геморрой код по мкб 10

Выбрать домены-исключения и провести массовую проверку в этой программе не получится. Еще один недостаток — очереди: с утра и днем сервис загружен и ждать оценки приходится долго — 7—10 минут.

Content Watch

Платформы: браузер
Максимальная длина текста при бесплатной проверке: 10 000 символов, максимум — раз в день
Платные тарифы: от 140 Р в месяц, за деньги можно увеличить количество знаков и проверок

Еще один сервис с собственными алгоритмами проверки. Инструмент распознает даже качественный рерайт и отличает цитаты от плагиата — это полезно при проверке рефератов, дипломов, диссертаций и докладов. В отличие от других сервисов, Content Watch проверяет не только текстовые фрагменты, но и сайты: одну страницу, все страницы или несколько нужных.

Content Watch позволяет добавить домены-исключения и провести массовую проверку, а вот с SEO-параметрами не работает.

Там, где Advego показывает уникальность 85%, Content Watch может выдать даже 95%. Это не принципиально, но знать о таких различиях важно, если вы проверяете чужие тексты: всегда уточняйте, каким сервисом оценивал свою работу автор.

Платформы: десктоп-версия, браузер
Максимальная длина текста при бесплатной проверке: 3000 символов до регистрации, 5000 — после
Платные тарифы: есть отдельная онлайн-проверка с ценой 1,5 Р за 1000 символов, максимум — 15 000 символов в одном тексте

eTXT — универсальный сервис: в нем можно проверить на уникальность не только текст, но и изображение.

Перед началом проверки нужно выбрать способ анализа: обнаружение копий или поиск дословных совпадений. В первом случае сервис будет искать точные совпадения с проверяемым текстом, а во втором — рерайт. По моим наблюдениям, eTXT отлично находит источники рерайта, но ошибается с показателями уникальности: например, у полностью заимствованного текста может показать схожесть около 85—90% вместо реальных 100%.

В десктопном приложении можно настроить параметры проверки: размер выборки, число слов в шингле и суммарное количество выборок. Скорость проверки зависит от длины текста: небольшие сервис обрабатывает мгновенно, а проверка объемных может занять несколько минут.

Массовой проверки, а также настройки SEO-параметров и доменов-исключений в eTXT нет.

Платформы: браузер
Максимальная длина текста при бесплатной проверке: 5000 символов до регистрации, 10 000 — после, в день можно проверить не больше 10 текстов
Платные тарифы: от 990 Р в месяц, за деньги можно увеличить количество проверок и провести SEO-анализ

Я люблю Pr-Cy за скорость: сервис проверяет текст быстрее аналогичных программ. Алгоритм умеет отличать цитаты от плагиата, но клише, шаблоны и устойчивые выражения отмечает как неоригинальные: добиться уникальности 100% на этом ресурсе практически невозможно.

Также сервис позволяет настроить SEO-параметры и домены-исключения, а вот массовой проверки в нем нет.

Тест первый: как хорошо и быстро сервисы найдут прямые заимствования

Для примера я проверил уже проиндексированный поисковыми системами текст, размещенный на сайте хостинга Beget. Вот его фрагмент:

Redis ( REmote DIctionary Server) — сетевое журналируемое хранилище данных типа «ключ» — «значение» с открытым исходным кодом. По сути Redis представляет собой базу данных (как MySQL), только упрощенную и более быструю за счет отсутствия связи между данными, а также простому механизму работы с данными (подход noSql).

Сначала протестируем скорость проверки, затем — качество обнаружения чужого текста.

Первым с проверкой, ожидаемо, справился Pr-Cy. Он показал уникальность 10%, что даже слишком много для полной «копипасты».

Вторым по скорости был eTXT, и он показал уникальность 2%:

Advego Plagiatus пришел к финишу третьим и ожидаемо показал максимально точный результат — 0% уникальности:

Content Watch был четвертым и показал уникальность 14%:

Дольше всех, как обычно, мучился text.ru: я был 380-м в очереди на проверку. Она завершилась через 7 минут. Долго, зато точно — уникальность 0%:

Хотя Pr-Cy справился быстрее всех, этот инструмент подойдет только для случаев, когда нужно бегло оценить уникальность текста. А если важно как можно точнее определить все заимствования, рекомендую Advego Plagiatus и Text.ru: они прошли эту проверку лучше других сервисов.

Тест второй: как хорошо сервисы справятся с рерайтом

Чтобы определить рерайт, сервисы пользуются другими алгоритмами, чем при поиске точных заимствований. Проверим качество их работы на примере небольшого фрагмента текста о картине «Портрет Клариссы Строцци». Вот оригинал из «Википедии»:

«Портрет Клариссы Строцци» (итал. Ritratto di Clarissa Strozzi) — картина итальянского живописца Тициана периода Высокого Возрождения. Создана около 1542 года по заказу отца Клариссы, Роберто Строцци. Художественные особенности картины выделяют ее из общего ряда детских портретов середины XVI века. Ей присущи черты «официального портрета» (портрет в полный рост, богатое убранство комнаты, пейзаж за окном, классический барельеф, комнатная собачка), и вместе с тем изображения ребенка, именно как ребенка, а не как миниатюрного взрослого, что отражает наметившуюся в то время смену парадигмы идеи детства. Картина оказала значительное влияние на способы изображения детей в эпоху барокко. В XVIII веке с нее была сделана гравюра.

А вот что получилось у одного из авторов с биржи копирайтинга, который берет 30 Р за 1000 знаков:

«Портрет Клариссы Строцци» — это известная работа Тициана. На картине изображена девочка в белом платье с собачкой. Несмотря на серьезное убранство помещениях, ребенок здесь уже не преподносится как «взрослый» человек. Скорее это связано с идеями детства как неизбежного этапа жизни, особенно ярко появившимися именно в период Высокого Возрождения. Стоит отметить, что семья Строцци, на момент создания картины, была одной из самых известных во всей Флоренции и пользовалась большой влиятельностью в самых широких кругах населения.

Advego Plagiatus — 100% / 41%. Второй показатель демонстрирует «количество оригинального текста в процентах от общего объема текста»:

Text.ru — 100%. Иначе говоря, сервис не нашел ни намека на рерайт — удивительно:

Advego Plagiatus и Content Watch смогли распознать даже качественный рерайт: а вот другие сервисы даже не заподозрили, что проверяемый текст похож на какой-то другой.

Читайте также:  не работает код активации касперского

Бонус: каких сервисов стоит опасаться

Кроме платформ, которые я перечислил, есть немало платных. Я не проверял тексты на них, но, судя по отзывам на независимых площадках вроде «Отзовика», их качество оставляет желать лучшего.

Вот несколько ситуаций, в которых нужно насторожиться:

Источник

Антиплагиат исходного кода: гибридный подход с использованием парсера ANTLR

Работая при университете, недавно столкнулся с интересной задачей, связанной с поиском академического плагиата во внутренней системе контестов по программированию, ставшей основой для преподавания основ алгоритмики студентам первого курса. Позже, начав поиск русскоязычных материалов, я был очень расстроен отсутствием каких-либо обобщающих статей на эту тему, поэтому незамедлительно решил восполнить этот пробел и рассказать о своем опыте создания модуля антиплагиата.

Введение

Академический плагиат — это очень распространенное явление, особенно если дать студентам много свободы в создании своих программ. По некоторым источникам, больше половины студентов технических специальностей хотя бы раз нечестно сдавали задания по программированию. Разумеется, с такой проблемой столкнулся и мой институт. Преподаватели и их ассистенты для большей части решений, прошедших проверку в системе автоматического тестирования, вынуждены открывать последние сданные исходники других студентов в рамках этой же задачи с целью выявить потенциальное наличие в них плагиата. Когда на потоке мало студентов и преподаватель условно знает «кто с кем дружит», то эта проверка не занимает длительного времени, но если на первый курс приходит более сотни студентов, то данную проблему быстро решить уже не получится. К счастью, этот процесс можно автоматизировать.

Начнём с того, что уже существует великое множество открытых и проприетарных решений, так или иначе решающих данную задачу: из опенсурсных популярны, например, MOSS и JPlag. Однако ни одно из них не удовлетворяет нашим требованиям: одни из них работают с лимитированным количеством языков программирования, другие сканируют половину интернета на наличие похожестей частей кода и прочее. Вот же краткий список требований к модулю, составленный нашей командой разработки:

Поддержка языков программирования платформы для контестов (C++, Python, Java, C# и Pascal);

Скоринг решений учеников, прошедших автоматическую проверку, в рамках одной задачи (то есть должна быть реализована push- или pull-модель взаимодействия с платформой);

Выдача преподавателю списка решений, наиболее похожих на целевое, для дальнейшего вынесения собственного вердикта о наличии списывания.

Как можно заметить, система просто должна автоматически выполнять ту работу, которую на данный момент вручную проделывает преподаватель. Остаётся лишь главный вопрос: как будет проходить непосредственно сам скоринг решений? И это уже детали реализации, которые мы сейчас разберем.

Типы заимствований исходного кода

Для начала стоит определиться, а что вообще считается академическим плагиатом? Существует прекрасная монография под названием A Survey on Software Clone Detection Research*, написанная ещё в 2007 году, и в дальнейшем повествовании я буду практически полностью опираться на неё, потому что она покрывает все необходимые нам темы. В ней описывается 4 основных типа заимствования исходного кода:

Программный код скопирован без каких-либо изменений (иными словами, идентичен оригиналу с точностью до комментариев);

Код скопирован с «косметическими» заменами идентификаторов (имен функций и переменных, типов данных, строковых литералов);

Код может включать заимствования второго типа, а также модификации скопированного оригинала путем добавления, редактирования или удаления его фрагментов или изменение порядка их исполнения, не влияющие на логику самой программы;

Программа некоторым образом переписана с общим сохранением логики работы и функциональности, однако синтаксически она может абсолютно отличаться от оригинала.

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

Другой проблемой является то, что любой алгоритм антиплагиата будет давать ложноположительный результат на коротких и простых задачах (например, алгоритм Евклида или сортировка пузырьком), ведь если студент в здравом уме, то он явно не напишет что-то оригинальное и отличное от других решений. С этим недоразумением можно справиться несколькими способами: либо не запускать алгоритм на коротких задачах в принципе, либо использовать какой-то алгоритм «с пенальти» на короткие программы, либо вообще не решать данную проблему: преподаватель сам понимает, что задача простая, поэтому, вероятнее всего, сразу проставит ей нужную оценку.

Методы сравнения исходных кодов

В литературе встречается множество способов сравнения программ. Вот пять наиболее универсальных и распространенных подходов, которые в дальнейшем были успешно применены в нашей системе:

Text-based метод заключается в сравнении текстовых представлений программ на основе некоторой метрики, например, расстояния Левенштейна или Джаро-Виклера. Данный способ отличается своей скоростью и простотой, но результативность быстро снижается даже на простейших «косметических» модификациях.

Token-based метод основан на преобразовании ключевых слов программы в последовательность лексем языка программирования (далее просто токенов). Полученные токены сравниваются любым доступным способом. Этот алгоритм гораздо точнее предыдущего, так как игнорирует все изменения второго типа, однако он всё ещё не справляется со структурными изменениями.

Metric-based метод определяет на полученных в предыдущем методе токенах некоторые метрики (например, кол-во используемых циклов и условных конструкций), а далее считает схожесть программ на основе количества совпадающих метрик. В целом, алгоритм отлично дополняет другие методы антиплагиата, однако он часто даёт ошибочный результат (в частности, метод успешно отрабатывает на программах с переименованием переменных и изменением условий и циклов, но моментально деградирует при добавлении в код NO-OPов по типу объявления пустого цикла или инициализации неиспользуемых значений).

Tree-based подход требует представления кода в виде абстрактного синтаксического дерева (далее просто AST, Abstract Syntax Tree). В таком формате программы сравниваются любым доступным способом: от «наивного» подсчёта совпадающих узлов до продвинутых методов на основе расстояния Zhang-Shasha. Часто данный способ считается наиболее эффективным, но в то же время его сложнее внедрить: помимо построения самих AST, нужна реализация алгоритма для их сравнения.

Читайте также:  надувные матрасы в чите

Binary-based метод требует прохождения кодом этапа компиляции (или интерпретации). Полученное бинарное представление (ассемблерный листинг или байткод) служит основой для дальнейшего сравнения программ. Помимо высокой точности на заимствованиях 1-2 типа (мелкие структурные изменения часто оптимизируются компилятором, а разные реализации одного функционала, дают одинаковый ассемблерный листинг), алгоритм может дать неплохой результат на модификациях третьего типа, но в то же время может и легко ломаться. Было выявлено, что банальное изменение типов данные может уронить коэф. схожести на несколько десятков процентов.

Конечно же, это не все существующие алгоритмы. Есть множественные модификации каждого из методов, так или иначе повышающие эффективность скоринга (в этом плане может быть интересен метод Шинглов), а также совершенно другие подходы, которые могут основываться, например, на поведении программы во время исполнения (behavior-based метод) ини на графе её зависимостей (PDG-based метод). Кстати, упомянутая выше монография наполнена сравнительными таблицами как самих методов, так и их модификаций, что очень интересно для изучения.

В дополнении приведу ещё один интересный подход: если вы знаете специфику действий своего пользователя (например, с каким среднем промежутком времени сдаются задачи на платформе или сколько попыток нужно потратить для успешной сдачи), то сможете выделить ряд метрик, на основе которых можно будет определять подозрительность поведения конкретного пользователя. Например, если студент сдаёт к ряду несколько задач и они проходят все тесты, то это отличный триггер на жульничество с его стороны. К сожалению, такой подход не является универсальным, а результат зависит от выделенных для использования метрик.

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

Разработка алгоритма антиплагиата

Гибридный алгоритм антиплагита может быть реализован следующими простыми шагами:

Форматирование и нормализация (в т.ч. удаление комментариев) исходного кода для повышения точности текстовых сравнений;

Получение промежуточных представлений программы, а именно её токенов, AST и ассемблерного листинга;

Непосредственно сравнение полученных форматов вышеперечисленными методами;

Вынесение вердикта на основе полученных коэффициентов схожести;

(Опционально) Вычисление дополнительных полезных статистик, например, дисперсии и квантилей распределения этих коэффициентов для всей выборки решений.

С первым шагом особых проблем не возникает: нормализация может быть выполнена средствами языка программирования (в т.ч. регулярными выражениями ), а для форматирования можно использовать сторонний инструмент (обратите внимание на clang-format), однако данный шаг опционален. Но вот с получением промежуточных представлений программы, а именно списка лексем и AST, могут возникнуть проблемы. Конечно, никто не мешает вам написать собственный лексер и парсер для каждой необходимой вам грамматики (так, например, сделали разработчики JPlag), но если у вас сжатые сроки и ленивые руки, то есть одно менее элегантное, но эффективное решение: использование парсера с открытым исходным кодом ANTLR.

ANTLR отлично зарекомендовал себя среди разработчиков различных грамматик и утилит для работы с ними, а сообщество уже добавило поддержку более двух сотен популярных языков программирования. Данный парсер сможет без проблем превратить вашу программу в список токенов, а также построить (и визуализировать!) абстрактное синтаксическое дерево на их основе. Небольшой платой за готовый синтаксический разбор будет долгое обращение к самой утилите (занимает порядка секунды для небольшой программы).

Итак, мы имеем все промежуточные представления на руках: ассемблерный листинг (или байткод) нам выдал компилятор/интерператор, токены и AST мы получили из ANTLR, а текстовое представление мы имеем по умолчанию. Исходники мы даже немного улучшили посредством нормализации, нечто подобное желательно сделать и с бинарным представлением, а именно удалить offsetы пямяти, оставив только исполняемые инструкции (тут достаточно задействовать утилиту grep).

Дальше нас ждет третий шаг, а именно скоринг полученных представлений. Со сравнением текстов и бинарного формата проблем не выходит: мы берем любую доступную метрику и сравниваем два набора символов. По моим наблюдениям, лучше всего показала себя комбинация расстояния Дамерау-Левенштейша и LCS. Со скорингом AST возникают некоторые трудности: если нужно это сделать эффективно, то в любом случае придётся считать редакторское расстояние для деревьев (кстати, есть одна каноническая реализация алгоритма на питоне), а если мы хотим сделать это быстро, то сойдёт и наивная стратегия, основывающаяся либо на прохождении по ветвям дерева до первого несовпадения элементов, либо на подсчете отношения количества совпавших узлов ко всем узлам (данная стратегия и легла в основу нашей реализации).

Полученный результат скоринга со всех методов, лежащий в промежутке от 0 до 1, фактически показывает, насколько два решения похожи друг на друга по некоторой метрике. Это можно усреднить и делать предположение по полученному значению: если коэффициент схожести программ выше 95%, то они практически идентичны. Дополнительные статистики, подсчитанные по выборке сданных на задачу решений, могут быть тоже очень полезны. К примеру, медианное значение схожести близкое к максимальному и низкая дисперсия говорят о простоте задачи — в этом случае можно уверенно давать отрицательный вердикт на наличие в решении заимствований.

Полученные результаты

Для тестирования полученного гибридного алгоритма была использована небольшая синтетическая выборка, включающая некоторые модификации программ на языках Java и C++ (

750 символов) для всех четырех типов заимствований. И вот как показали себя примененные методы по отдельности (коэф. схожести усреднен и округлен):

Источник

Поделиться с друзьями
admin
Здоровый образ жизни: советы и рекомендации
Adblock
detector