Так устроен поиск заимствований в Антиплагиате

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

    • как быстро найти абзац текста среди сотен миллионов статей;
    • во что превращается документ после загрузки в систему Антиплагиат, и что с этим делать дальше;
    • как формируется отчет, который почти никто не смотрит, а стоило бы;
    • как проиндексировать не все, но достаточно.




    Как все начиналось


    В 2005 году ректор одного из крупных московских вузов пришел к нам в компанию Forecsys за решением очень серьезной проблемы — в учебных заведениях студенты сдавали тотально списанные дипломы и курсовые работы. Мы взяли несколько сотен работ отличников и поискали их в сети простыми запросами. Больше половины «отличников» оказались жуликами, которые скачали диплом из интернета и заменили только титульную страницу. Больше половины отличников, Карл! Что происходило с обычными студентами — сложно даже представить. Проще всего работа искалась по запросу, содержащему слова с «очепятками». Нам стали понятны масштабы бедствия. Надо было срочно что-то решать. Зарубежные англоязычные вузы к тому времени уже пользовались решениями по поиску заимствований, но работы на русском языке почему-то не проверял никто.

    Зарубежные игроки не захотели тогда адаптировать свои решения под русский язык. В результате 17 марта 2005 года стартовала разработка первой отечественной системы поиска заимствований. Само слово «Антиплагиат» было придумано чуть позже, а домен antiplagiat.ru зарегистрирован 28 апреля 2005 года. Мы планировали выпустить сайт к 1 сентября 2005 года, но, как это часто бывает с программистами, немного не успели. Официальный день рождения нашей компании — это день, когда antiplagiat.ru принял первых пользователей, а именно 4 сентября. Знаете, я даже этому рад, поскольку во время корпоратива по случаю дня рождения компании все могут спокойно праздновать, а не переживать за первый школьный день у своих детей.

    Но что-то я отвлекся. В 2005 году мы создали своеобразный поисковик, в котором, в отличии от Яндекса и Гугла, запросом выступает не два-три слова, а целый текст, состоящий из нескольких предложений. Поэтому разумно использовать «Антиплагиат», если у вас есть текст от 1000 знаков (это примерно полстраницы).

    Во время разработки сервиса был сделан прототип на php (web-часть) и Microsoft SQL Server (поисковый движок). Сразу же стало понятно, что это не взлетит и будет медленно работать уже на нескольких миллионах документов. Поэтому пришлось пилить свой поисковый движок. Сейчас система написана на C# и python, использует PostgreSQL и MongoDB (на самом деле много чего еще, но об этом в следующей статье). Поисковый движок у нас по-прежнему полностью собственной разработки. Ставьте лайки Пишите в комментариях, если хотите узнать об истории развития системы, смене процессов работы компании и железе, на котором «Антиплагиат» работал в разные моменты своей жизни, и работает сейчас.

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

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

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



    Давайте посмотрим, как все это происходит в деталях.

    Извлечение текста


    Прежде всего, «Антиплагиат» является сервисом поиска только текстовых заимствований, а значит, из всех документов нам нужно извлечь текст, чтобы дальше с ним работать. Система поддерживает возможность загрузки документов в docx, doc, txt, pdf, rtf, odt, html, pptx и еще нескольких (никогда не использовавшихся) форматах. Также все эти документы вы можете загружать в архивах (7z, zip, rar). Такой способ был популярен, когда у нас не было возможности загружать сразу несколько документов через веб-интерфейс. Ниже приведен график популярности форматов загружаемых документов в корпоративной части нашей системы. На нем видно, как за несколько лет doc вытесняется docx, и постепенно растет доля pdf. Если не рассматривать txt (извлечение текста для него тривиально), то для нас наиболее приятным является pdf. За рубежом pdf является стандартом де-факто, в нем публикуются статьи, готовятся студенческие работы. Согласно нашей статистике, pdf постепенно набирает популярность в России и странах СНГ. Мы и сами продвигаем этот формат в массы, рекомендуя загружать документы именно в нем.

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

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

    Самым сложным для нас является doc. Этот формат долгое время был закрытым, и сейчас существует куча его реализаций. Последний Microsoft Word, который не поддерживал .docx (пусть и через Microsoft Office Compatibility Pack), выпускался аж 20 лет назад и входил в Microsoft Office 97. Формат использует внутри себя OLE, позже выросшее в COM и ActiveX, все бинарное, местами не совместимое между версиями. В общем, ужасный сон современного программиста. Хорошо, что .doc-формат постепенно сходит со сцены. Думаю, настало время и нам помочь ему выйти на пенсию. Скоро мы станем целенаправленно предупреждать пользователей о том, что этот формат устарел.



    Итак, вернемся к отчету. Мы получили файл и начали извлекать текст. Вместе с текстом система извлекает и позиции слов на страницах, чтобы в дальнейшем иметь возможность показывать нашим пользователям разметку отчета о заимствовании на самом документе. Кроме того, на этом же этапе мы ищем технические обходы «Антиплагиата».

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

    В зарубежных системах поиска проблемы обнаружения технических обходов и противодействия им, практически, не стоит. Дело в том, что за обнаруженный «финт ушами» последует очень жесткое наказание — отчисление, и несмываемое пятно на научной репутации, несовместимое с дальнейшей карьерой. У нас же ситуация до комичного проста: «Ой, это система что-то напортачила!», «Ой, это не я, оно само!». Студента скорее всего отправят переделывать. Дело в том, что списать, увы, не является чем-то зазорным.

    Но опять отвлекся. Еще одним способом извлечения текста является OCR. Мы печатаем документ на виртуальном принтере, а потом распознаем его. Подробнее об этом написано в статье «Распознавание изображений на службе у «Антиплагиата»».

    Теперь немного нашей истории об извлечении текстов. Сначала мы извлекали тексты с помощью IFilter'ов. Они медленные, только под Windows, и не возвращают информацию о форматировании (непонятно, где белый текст на белом фоне, нельзя потом сделать разметку блоков заимствования прямо в документе пользователя). Мы думали, что эти проблемы решатся, если начать использовать платные библиотеки, но и тут обнаружили ограничения: по-прежнему под Windows, не видят формул, иногда падают на специально подготовленных документах (разные библиотеки на разных!). Следующая идея была в том, чтобы OCR'ить все входящие документы, но этот подход очень ресурсозатратен (обработка всего 10-и страниц в минуту на одном ядре), и местами текст извлекается не точно.

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

    Текст извлечен, обходы найдены и частично устранены, отправляемся искать заимствования!

    Поиск заимствований


    Идея, реализованная в процедуре поиска, была предложена Ильей Сегаловичем и Юрием Зеленковым (прочитать можно, например, в статье: Сравнительный анализ методов определения нечетких дубликатов для Web-документов). Расскажу, как это работает у нас. Возьмем, для примера, предложение: «Указ Президента РФ от 7 мая 2012 г. N 596 „О долгосрочной государственной экономической политике“».

    1. Разбиваем предложения на слова, выкидываем числа, знаки препинания, стоп-слова. Лемматизируем (приводим в нормальную форму) все слова.
    2. Превращаем слова в целые числа путем хеширования, получаем массив чисел.
    3. Берем первую тройку хешей, затем 2, 3, 4-ый хеш, затем 3, 4, 5-ый и так до конца массива хешей. Это и есть шинглы — черепички. Свое название такой способ получил из-за такого черепичного перекрытия наборов. Каждую черепичку сливаем в один объект и хешируем еще раз.
    4. Сортируем полученные числа, получаем упорядоченный массив целых чисел. Это и есть основа для поиска.



    Теперь для поиска нам нужна магическая функция, которая по такому списку хешей превращает документы, отранжированные по убыванию числа совпавших хешей, в документ-источник. Эта функция должна работать быстро, т.к. мы хотим искать в миллиардах документов. Для того, чтобы быстро находить такой набор, нам нужен обратный индекс, который по хешу возвращает список документов, в которых этот хеш есть. У нас реализована такая гигантская хеш-таблица. В отличии от наших старших братьев-поисковиков, мы храним эту таблицу на ssd, а не в памяти. Нам вполне хватает такой производительности. Поиск по индексу занимает малую часть времени от всего цикла обработки документа. Смотрите как проходит поиск:

    Этап 1. Поиск по индексу

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

    Этап 2. Построение ревизии

    Для большого текста-запроса кандидатов может быть порядка 10 тыс. Это все равно много для сравнения каждого документа с текстом-запросом. Действуем жадно, но решительно. Берем первый документ-источник, делаем сравнение с текстом-запросом и исключаем из всех остальных кандидатов те хеши, которые уже были в этом первом документе. Удаляем из списка кандидатов тех, у которых остался ноль хешей, пересортируем кандидатов по новому числу хешей. Берем первый документ из нового списка, сравниваем с текстом-источником, удаляем хеши, удаляем нулевых кандидатов, пересортируем кандидатов. Делаем так раз 10-20, обычно этого хватает, чтобы список иссяк или в нем остались только те документы, у которых есть совпадение по нескольким хешам.

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

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

    Сборка отчета


    Кстати, а что делать, если один из 10-15 модулей не ответил вовремя? Мы ищем по коллекциям РГБ, eLibrary и Гаранта. Эти модули поиска расположены на территории сторонних организаций, и не могут быть перенесены на нашу площадку по соображениям авторского права. Точкой отказа тут всегда может быть канал связи и различные форс-мажоры в дата центрах, не управляемых нами. С одной стороны, заимствование может быть найдено в любом модуле поиска, с другой, если один из компонентов системы недоступен, то можно ухудшить качество поиска, но отдать большую часть результата, предупредив при этом пользователя, что результат по некоторым модулям поиска пока не готов. Какой вариант применили ли бы вы? Мы применяем оба этих варианта в зависимости от обстоятельств.



    Наконец, все ревизии получены, начинаем сборку отчета. Здесь используется подход аналогичный подготовке одной ревизии. Вроде бы ничего сложного, но и тут есть интересные задачи. У нас есть заимствования двух типов. Зеленым обозначаются «Цитирования» — корректно оформленные (по ГОСТу) цитаты из модуля «Цитирование», выражения типа «что и требовалось доказать» из модуля «Общеупотребительных выражений», нормативно правовые документы из баз Гаранта и Лекспро. Оранжевым отмечаются все остальные заимствования. Зеленые имеют приоритет над оранжевыми, если только не входят целиком в оранжевый блок.

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

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

    Доля в тексте — отношение объема, заимствованного из данного источника текста к общему объему документа. Доли в тексте по источникам суммировать нет смысла, легко получится 146% или даже больше. Данный показатель не изменяется при изменении отчета.

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

    Однако вернемся на шаг назад и узнаем, что же попадает в индекс модуля поиска по интернету, созданный Антиплагиатом.

    Индексация интернета


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

    1. Наш робот приходит, представляется и, руководствуясь robots.txt (у нас хороший робот), загружает документы с разумной нагрузкой на каждый хост (в работе одновременно сотни сайтов, поэтому мы можем и подождать некоторое время между загрузками страниц);
    2. Робот передает документ и его метаданные в очередь на обработку, из документа извлекается текст;
    3. Текст анализируется на «качество» — как вы помните из статьи про свалку, мы умеем определять жанр документа, добавляем сюда простые эвристики на объем и понимаем, годный текст к нам пришел или какая-то белиберда;
    4. Качественный текст проходит дальше и превращается в хеши. Хеши и метаданные отправляются в основной индекс интернета;
    5. Мы сравниваем пришедший текст с ранее проиндексированными нами текстами. Новичок добавляется, только если он реально новый, т.е. 90% его хешей не содержится целиком в каком-то другом уже проиндексированном тексте. Если же документ уже есть у нас, мы добавляем url этого документа в атрибуты нашего архива.

    Таким образом мы индексируем качественные тексты, и все проиндексированные тексты у нас существенно различны. Рост объема проиндексированного в интернете показан на рисунке ниже. Сейчас в среднем мы добавляем в индекс по 15-20 млн документов в месяц.



    Заметили, что нигде не описана процедура удаления из индекса? А ее и нет! Мы принципиально не удаляем документы из индекса. Мы считаем, что если нам удалось увидеть что-то в интернете, то и другие люди могли видеть этот текст и использовать его тем или иным способом. В связи с этим появляется интересная статистика того, что когда-то было в интернете, а теперь уже больше там нет. Да, представьте себе, выражение «Попавшее в интернет останется там навсегда», — не верно! Что-то исчезает из интернета навсегда. Интересно ли вам узнать о нашей статистике по этому вопросу?

    Заключение


    Удивительно, как технические решения, принятые больше 10 лет назад, до сих пор остаются актуальными. Мы сейчас готовим к выпуску 4 версию индекса, она быстрее, технологичнее, лучше, однако в ее основе лежат всё те же решения. Появились новые направления поиска — переводные заимствования, перефразирование, но и там находит применение наш индекс, выполняя пусть и малую, но важную часть работы.

    Уважаемые читатели, что вам было бы интересно узнать о нашем сервисе ещё?
    «Антиплагиат»
    112,00
    Компания
    Поделиться публикацией

    Комментарии 31

      +6
      Сервис конечно полезный. Но то как его использует Минобр, это нечто.
      Кандидатская диссертация не проходит проверку из-за «плагиата» моих же научных статей, опубликованных в процессе написания диссертации.
        0
        Проблема понятна и знакома, но не в области Минобра. Это зона ответственности конкретного диссертационного совета. Мы неоднократно писали письма с разъяснениями, можете написать мне в личку, постараемся помочь. В целом, мы ведем активную разъяснительную работу и уже есть достаточно много мест правильной работы с нашим инструментом.
          +1
          Спасибо! Уже корочка получена.
            +2
            За 28 минут решили проблему? Вот это я понимаю — связи!
        +1
        Писал в помощь кафедре утилиту, которая позволяла быстро определять попытки грязного обхода вашей системы. Критерии следующие: скрытый текст, блоки с текстом (скрытые, прозрачные, белые, за границей документа), подмена букв, определение прямых модификаций разметки и вывод небольшой статистики: количество изображений в документе, общее количество ошибок.
        Это позволяет «на потоке» быстро отсечь совершенно левые работы. При тестировании умудрялись находить работы, где использовались все методы одновременно.
        Думаю, что тема для вас не нова, но мне кажется, что было бы неплохо встроить эту проверку на этапе загрузки документа.
          +3
          Это есть на этапе загрузки документа. Все что вы перечислили уже встроено в систему. Недавно мы сделали показ этой информации в интерфейсе (ниже пример того как это выглядит) и обновили критерий подозрительного документа. Опыт ценный, буду признателен, если поделитесь примерами «подготовленных» документов.

            0
            Тогда просто молодцы :)
              0
              А как боретесь с «синонимированием»? Надеюсь правильно употребил термин, когда производится автоматическая замена словом-синонимом. Два синонима в предложении и это же будет уже совершенно иной и «чистый» текст.
          0
          Кстати, по накопленному опыту, наши письма очень даже помогают поставить ситуацию на место. Хочется, конечно, решить ситуацию системно, но, например, в этом году Минобру было не до плагиата в диссертациях :)
            0
            Огромные проблемы возникают у студентов-технарей и, соответственно, преподавателей. Большинство курсовых работ — это один и тот же расчет по разным исходным данным и отличия между курсовиками в формулах, таблицах, графиках и чертежах. А текстовая часть и названия рисунков — идентичные.
              +2
              А зачем в этом случае использовать «Антиплагиат»? Тут скорее эксель нужен для проверки расчетов. Коллекция одобренного к цитированию текста для компании у нас в планах. Правда, пока не могу сказать когда мы это зарелизим. Это должно снять боль студентов-технарей в сценарии описанном вами.
                +1
                А это никого не волнует на всех уровнях выше преподавателя/студента/заведующего кафедрой — всё у всех должно быть разное!
                Сколько я слов нелестных слышал, работая на кафедре ИТ от преподов ИТ и математиков. Понятное дело, что проблема не в Антиплагиате, а в системе контроля образования, но негативные эмоции возникают только после проверки на плагиат.
                  0
                  Вопрос переадресуем к Министерству науки и высшего образования — это их требования.
                  А расчеты и чертежи и так проверяем на правильность.
                    0
                    Это не требования МОН. Это требования вуза, так как конкретный порядок сбора ВКР и проверки на заимствования определяется локальными актами учебной организации
                      0
                      Для уточнения: п.38, приказа Минобрнауки РФ №636 от 29 июня 2015 года.
                    0
                    Год назад сдавал дипломную работу. Преподаватели были рады, что это не очередная «локалка на предприятии»
                    0
                    (удалено)
                      0
                      Microsoft Office 97

                      2000
                        0
                        Когда готовил статью, то на автомате написал, что 97 офис был последним, для которого doc был родным форматом. Позже занялся проверкой фактов, оказалось, что doc был основным для Word вплоть до 2003 включительно. MS Compatibility Pack, дающий старым версиям возможность читать и писать docx, имеет минимальные требования Word 2000 sp3.
                          0
                          Снова нет: www.microsoft.com/en-us/download/details.aspx?id=33298

                          Recommended Microsoft Office programs:

                          Microsoft Word 2000 with Service Pack 3, Microsoft Excel 2000 with Service Pack 3, and Microsoft PowerPoint 2000 with Service Pack 3

                          Microsoft Word 2002 with Service Pack 3, Microsoft Excel 2002 with Service Pack 3, and Microsoft PowerPoint 2002 with Service Pack 3

                          Microsoft Office Word 2003 with at least Service Pack 1, Microsoft Office Excel 2003 with at least Service Pack 1, and Microsoft Office PowerPoint 2003 with at least Service Pack 1

                          Ваша первоначальная идея была-таки верна. Почти. MS Office 97 — был последним, который не умеет DOCX вообще. А «из коробки» его добавили только в версии с пресловутым риббоном (2007+)
                        0
                        Меня очень смущает жадный алгоритм.
                        Вы сравнивали его полноту с не жадным?
                        А с MinHash, Bloom filter, SimHash, w-shingling, Count-min sketch?
                          0
                          Как применить хотя бы один из перечисленных алгоритмов в том месте где я упомянул про жадность? Жадный алгоритм выбора документов-кандидатов для построения отчета эффективен и отлично справляется с поставленной задачей.
                          Возможно я неправильно понял ваш вопрос?
                            0
                            Огромное спасибо за ваш проект. Жаль, что в 21 веке такой отчет до сих пор не обязателен. Я не ставлю под сомнение эффективность алгоритма, но если эта информация не является секретной было бы классно опубликовать чуть больше технических деталей.

                            Жадным называется алгоритм, принимающий локально оптимальные решения. В примере с поиском документов по запросу логично предположить, что такой алгоритм может снижать полноту выборки по документам. Поскольку большое количество хешей(не фрагментов) еще не гарантия того, что будут найдены все заимствования, то вроде как условия для жадности не выполняется.
                            Например, на основании 2х первых наборов хешей будет отброшен документ содержащий общий набор хешей, но в нем будет заимствование, которого может не оказаться в первых документах.
                            1: AAA 2:BBB 3:AB
                            Я понимаю, что с учетом перекрытия при шинглировании реальный пример будет сложнее, но потеря полноты на данном этапе может помешать установить наибольший заимствованный фрагмент например.
                            Если же вспомнить, что хеши имеют коллизии, то еще больше хочется увидеть конкретные цифры полноты и точности для данного алгоритма.
                            Пример того, как можно использовать MinHash:
                            Считаем MinHash для типичных фрагментов абзац/предложение, совпадение хешей в этом случае будет означать совпадение фрагментов с вероятностью, которой можно управлять количеством хеш-функций. В дальнейшем, при отборе документов мы имеем фрагменты текста, а нет хеши.
                              0
                              Тут весь фокус в том, что мы не стремимся за полнотой. Важно найти большие фрагменты, а если останутся несколько единичных n-ок слов (черепички), то это не сыграет большой роли и мы заодно не покажем заимствование какого-то часто употребимого набора слов. От отчета требуется максимизировать покрытие текста-запроса найденными фрагментами и вполне логично брать для подробного сравнения документы-кандидаты с большим числом совпавших шинглов. Как показывает практика практически все шинглы документа-кандидата потом вычеркиваются из дальнейшего рассмотрения.
                          0
                          У меня такой вопрос: я балуюсь корректорской вычиткой на сайтах фанфиков и самиздате, проблема в том, что глаз достаточно быстро замыливается, в итоге я не могу определить, какой в этом случае ставится знак препинания и ставится ли вообще (в первую очередь вводные слова, слова-предложения, несколько союзов подряд, устоявшиеся выражения). Поскольку заучивать Розенталя мне откровенно лень, хотел написать себе хелпер: сопоставление выбранного неуникального куска текста с корпусом литературы, например, от Чехова и до 80х (в 90х корректоры с редакторами, случалось, откровенно халявили), и просто смотреть, ставилась запятая или таки нет. Хотел бы попросить совета по подготовке и хранению текста: имеет ли поступить как это описали Вы (лемматизация, черепички), привязать к хэшу положение в тексте, а потом смотреть глазами, есть ли там запятая. Или стоит как-то иначе?
                            0
                            Объем указанных вами источников не очень велик. Думаю в десяток гигов все влезет. Я бы предложил использовать вторую часть нашего поиска сразу. Копайте в сторону суффиксных деревьев для быстрого поиска. Такое дерево вам потребуется построить единожды т.к. ваш эталонный корпус текстов, судя по всему, меняться уже не будет.
                            +1
                            Забавно, я будучи преподавателем вуза написал прообраз подобной системы в 2000-м году) Тоже в марте) С интернетом тогда еще были сложности и рефераты в основном были на компакт-дисках, а обсуждение системы было в конференции фидонета) Го*ны среди студентов начали сразу бурлить от понимания того, что тайное можно сделать явным. Дошел тогда до того, что сам текст хранить не надо, надо хешировать, но скорость поиска совпадений всё одно была печальной (2000-й год все таки, компьютеры уровня Целерона 466-го). Но в большей степени остановило меня тогда необходимость извлечения текста из документов разных форматов типа doc, поэтому студенты получили еще 5 лет халявы)
                            И всё-таки хорошо, что такую систему сделали)
                            Желаю успехов в дальнейшем развитии!
                              0
                              необходимость извлечения текста из документов разных форматов типа doc

                              На локальной машине для этого можно пользоваться Word'ом. Пишем ему макрос, который будет извлекать текст и сохранять его в txt, и радуемся жизни.
                              0
                              Интересно узнать, как построена разработка, какие у Вас процессы, как устроен быт команд! Как Вы всё это делаете и доносите продукт пользователю?
                                0
                                Есть в планах такая статья.

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

                              Самое читаемое