Вопрос

Привет всем во всем мире,

Предыстория

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

Анализатор плагиата будет:

  1. Отсканируйте все абзацы загруженного документа.Проанализируйте процентное соотношение каждого абзаца, скопированного с какого веб-сайта.
  2. Выделяйте в каждом абзаце только те слова, с какого именно сайта они скопированы.

Моя главная цель - разработать что-то вроде Turnitin, улучшенное, если это возможно.

У меня есть менее 6 месяцев на разработку программы.Я рассмотрел следующее:

  1. Реализация веб-сканера. Вероятно, я буду использовать Lucene API или разрабатывать свой собственный поисковый робот (какой из них лучше с точки зрения времени разработки, а также удобства использования?).
  2. Хеширование и индексация. Чтобы улучшить поиск и анализ.

Вопросы

Вот мои вопросы:

  1. Может ли MySQL хранить так много информации?
  2. Пропустил ли я какие-нибудь важные темы?
  3. Каково ваше мнение об этом проекте?
  4. Есть какие-либо предложения или методы для выполнения анализа сходства?
  5. Можно ли хэшировать абзац так же, как и слова?

Заранее благодарю за любую помощь и совет.^^

Это было полезно?

Решение

Рассматривали ли вы другой проект, который не был бы обречен на провал из-за нехватки доступных вам ресурсов?

Если вы действительно хотите пойти по пути "Эй, давайте обойдем весь интернет!", вам нужно будет использовать такие вещи, как HBase и Hadoop, и множество других машин.MySQL будет крайне недостаточным.TurnItIn утверждает, что просмотрел и проиндексировал 12 миллиардов страниц.Индекс Google больше похож на [отредактировано].MySQL, или, если уж на то пошло, любая другая СУБД, не может масштабироваться до такого уровня.

Единственный реальный способ, которым вы сможете это осуществить, - это сделать что-то удивительно умное и выяснить, как создавать запросы к Google, которые выявят плагиат документов, уже присутствующих в индексе Google.Я бы рекомендовал использовать очередь сообщений и синхронно обращаться к search API.Очередь сообщений также позволит вам ограничить количество ваших запросов до разумного уровня.Избегайте стоп-слов, но вы все равно ищете почти точные совпадения, поэтому запросы должны быть такими: "* quick brown fox jumped over * lazy dog" Не утруждайте себя выполнением запросов, которые заканчиваются следующим образом: "* * went * * *" И игнорируйте результаты, которые возвращаются с 94 000 000 просмотров.Это будет не плагиат, это будут известные цитаты или чересчур общие запросы.Вы ищете либо менее 10 просмотров, либо несколько тысяч просмотров, которые все в точности соответствуют вашему исходному предложению или какому-то аналогичному показателю.И даже тогда это должно быть просто эвристикой — не помечайте документ, если в нем нет большого количества красных флажков.И наоборот, если все возвращается с нулевым результатом, они ведут себя необычайно оригинально.Для поиска книг обычно требуются более точные запросы.Достаточно подозрительные материалы должны вызывать HTTP-запросы к исходным страницам, и окончательные решения всегда должны быть прерогативой человека.Если документ ссылается на свои источники, это не плагиат, и вы захотите это обнаружить.Ложноположительные результаты неизбежны и, скорее всего, будут частыми, если не постоянными.

Имейте в виду, что TOS запрещают постоянное хранение любой части индекса Google.

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

Другие советы

1) Создать свой собственный веб-сканер?Похоже, вы можете легко использовать все свободное время только для этой задачи.Попробуйте использовать для этого стандартное решение:это не суть вашей программы.

У вас все равно будет возможность сделать свой собственный или попробовать другой позже (если у вас останется время!).Ваша программа должна работать только с локальными файлами, чтобы не быть привязанной к конкретному сканеру/API.

Возможно, вам даже придется использовать разные сканеры для разных сайтов.

2) Возможно хеширование целых абзацев.Вы можете просто хэшировать любую строку.Но, конечно, это означает, что вы можете проверять только целые параграфы, скопированные точно.Возможно, предложения будут лучшим модулем для тестирования.Вероятно, вам следует «нормализовать» (преобразовать) предложения/параграфы перед хешированием, чтобы разобраться в незначительных различиях, таких как прописные/строчные буквы.

3) MySQL может хранить много данных.

Обычный совет:придерживайтесь стандартного SQL.Если вы обнаружите, что у вас слишком много данных, у вас все равно будет возможность использовать другую реализацию SQL.

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

Онлайн-код обычно распространяется по лицензиям OpenSource.И большая часть кода — это просто руководства.По вашей логике копирование чего-либо с любого сайта является плагиатом.Это означает, что вы не можете принять и использовать любой полученный здесь ответ.Если вы действительно хотите завершить свой проект, просто напишите систему, которая будет сравнивать код учеников того же класса и предыдущих классов.Это гораздо эффективнее.Примером такой системы является МОХ (есть также статья, в которой рассказывается, как это работает).Эта штука действительно эффективна без каких-либо веб-сканеров.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top