Подтвердить что ты не робот

Как бы вы закодировали сайт антиплагиата?

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

Как работают алгоритмы, которые обнаруживают плагиат в загруженном тексте? Использует ли он регулярное выражение для отправки всех слов в индекс, выделяет известные слова типа "the", "a" и т.д., А затем видит, сколько слов одинаково в разных эссе? Есть ли у них волшебное количество одинаковых слов, которые обозначают его как возможный дубликат? Использует ли он levenshtein()?

Мой язык выбора - PHP.

UPDATE

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

Вот онлайн-сайт, который утверждает, что делает это: http://www.plagiarism.org/

4b9b3361

Ответ 1

Хорошее обнаружение плагиата будет применять эвристику на основе типа документа (например, эссе или программного кода на определенном языке).

Однако вы также можете применить общее решение. Посмотрите Нормализованное расстояние сжатия (NCD). Очевидно, вы не можете точно вычислить текст сложность Колмогорова, но вы можете приблизиться к нему, просто сжимая текст.

Меньше NCD указывает, что два текста более похожи. Некоторые сжатия алгоритмы дают лучшие результаты, чем другие. К счастью, PHP поддерживает для нескольких алгоритмов сжатия, поэтому вы можете иметь плагиат, управляемый NCD код обнаружения работает в состоянии бездействия. Ниже я приведу пример кода, который использует Zlib:

PHP:

function ncd($x, $y) { 
  $cx = strlen(gzcompress($x));
  $cy = strlen(gzcompress($y));
  return (strlen(gzcompress($x . $y)) - min($cx, $cy)) / max($cx, $cy);
}   

print(ncd('this is a test', 'this was a test'));
print(ncd('this is a test', 'this text is completely different'));

Python:

>>> from zlib import compress as c
>>> def ncd(x, y): 
...     cx, cy = len(c(x)), len(c(y))
...     return (len(c(x + y)) - min(cx, cy)) / max(cx, cy) 
... 
>>> ncd('this is a test', 'this was a test')
0.30434782608695654
>>> ncd('this is a test', 'this text is completely different')
0.74358974358974361

Обратите внимание, что для больших текстов (чтение: фактические файлы) результаты будут намного больше произносятся. Попробуйте и сообщите о своих впечатлениях!

Ответ 2

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

Чтобы получить что-то, что работает на уровне фразы, вам может потребоваться более сложный, если вы хотите любой уровень эффективности. Например, вы можете искать различия в стиле письма между абзацами и фокусировать свое внимание на параграфах, которые кажутся "неуместными" по сравнению с остальной частью статьи.

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

http://ir.shef.ac.uk/cloughie/papers/pas_plagiarism.pdf

http://proceedings.informingscience.org/InSITE2007/IISITv4p601-614Dreh383.pdf

Ответ 3

На самом деле это зависит от того, "изгонял ли он". Если вы говорите в контексте одного сайта, который значительно отличается от Интернета, или библиотеки congres, или...

http://www.copyscape.com/ в значительной степени доказывает, что это можно сделать.

Основная концепция, похоже,

  • выполните поиск Google для некоторых необычных последовательности слов
  • Для каждого результата выполните подробный анализ

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

Ответ 4

Для получения лучших результатов по не очень большим строкам:

Существуют проблемы с прямым применением формулы НИЗ по строкам или небольшим текстам. NCD (X, X) не равно нулю (!). Чтобы удалить этот артефакт, вычтите сравнение.

См. аналогичную демонстрацию типа_NCD_gzip() в http://leis.saocarlos.sp.gov.br/SIMILAR.php

function similar_NCD_gzip($sx, $sy, $prec=0, $MAXLEN=90000) {
# NCD with gzip artifact correctoin and percentual return.
# sx,sy = strings to compare. 
# Use $prec=-1 for result range [0-1], $pres=0 for percentual,
#     $pres=1 or =2,3... for better precision (not a reliable)  
# Use MAXLEN=-1 or a aprox. compress lenght. 
# For NCD definition see http://arxiv.org/abs/0809.2553
# (c) Krauss (2010).
  $x = $min = strlen(gzcompress($sx));
  $y = $max = strlen(gzcompress($sy));
  $xy= strlen(gzcompress($sx.$sy));
  $a = $sx;
  if ($x>$y) { # swap min/max
    $min = $y;
    $max = $x;
    $a = $sy;
  }
  $res = ($xy-$min)/$max; # NCD definition.

  # Optional correction (for little strings):
  if ($MAXLEN<0 || $xy<$MAXLEN) {
    $aa= strlen(gzcompress($a.$a));
    $ref = ($aa-$min)/$min;
    $res = $res - $ref; # correction
  }
  return ($prec<0)? $res: 100*round($res,2+$prec);
}

Ответ 5

Ну, прежде всего, вы должны понять, с чем вы столкнулись.

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

"I think" => 454,000,000
"I think this" => 329,000,000
"I think this is" => 227,000,000
"I think this is plagiarism" => 5

Таким образом, даже при таком подходе у вас есть очень высокий шанс найти хороший матч или два (забавный факт: большинство преступников действительно тупые).

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

Однако самой большой проблемой является концептуальный плагиат. Это действительно сложно и нет очевидных решений без разбора семантики каждого предложения (т.е. Достаточно сложного AI).

Правда, правда, вам нужно всего лишь найти НЕКОТОРЫЙ вид матча. Вам не нужно найти точное соответствие, чтобы найти соответствующий текст в вашем корпусе. Окончательная оценка всегда должна быть сделана человеком в любом случае, так что это нормально, если вы найдете неточное соответствие.

Плагиоры в основном глупы и ленивы, поэтому их копии будут глупыми и ленивыми. Некоторые прикладывают невероятные усилия в свою работу, но эти работы часто являются неочевидным плагиатом в первую очередь, поэтому трудно отследить программно (т.е. Если у человека возникают проблемы с распознаванием плагиата с обоими текстами, представленными бок о бок, скорее всего, будет и компьютер). Для всех остальных 80% -или-то глупый подход достаточно хорош.