@AstonMartin

Как сравнить есть ли уже такой файл в базе или нет?

Добрый день!

Помогите с задачей, пожалуйста.

Есть несколько сотен тысяч PDF файлов. Постоянно добавляются новые файлы и надо оперативно определять есть ли уже такой файл среди существующих или нет, с точностью совпадения, допустим в 99%. Поэтому по хэшам не подходит.

Как бы вы подошли к решению такой задачи? Какие есть готовые инструменты для этого? Идеально если под node.js
  • Вопрос задан
  • 231 просмотр
Пригласить эксперта
Ответы на вопрос 4
borisdenis
@borisdenis
Ленив и вреден...
Вести базу MD5 и SHA1 хешей для всех файлов, при добавлении нового файла высчитываем для него эти хеши и смотрим по базе, нет ли у нас файла. у которого оба хеша совпали, если есть - значит такой файл уже загружен и можно его повторно не загружать.
Ответ написан
@12rbah
с точностью совпадения, допустим в 99%.

Вот посмотрите Как сравнить два текста в JS? . https://stackoverflow.com/questions/5042873/javasc...

Проверку на хеш в вашем случае тоже можно делать, т.к. pdf довольно редко редактируют и все передают одну и ту же книгу.

Есть несколько сотен тысяч PDF файлов.

Это реальная проблема или просто от нечего делать придумали? Слишком мало информации по самим документам. в некоторых сферах, где много типовых отчетов это обычное дело когда документ на 95% похож на другой, поменяться может например только одна цифра в дате, и такой документ нельзя будет отбраковывать. И из пдфа вы не всегда можете извлечь текст для сравнения. В общем довольно много подводных камней. Поэтому стоит более конкретно определиться с задачей.

upd: в общем есть еще такая особенность, что нужно правильно выбрать средство для извлечения текста, т.к. многие средства извлекают не всегда весь текст. Ну и еще интересно как быстро вы сравните 1 pdf со 200-300к других pdf, как по мне затраты на этот процесс будут слишком большими. Можно конечно сравнить только часть текста. Да кстати, извлечение текста из pdf медленный процесс, текст из некоторых страниц может извлекаться больше секунды на обычных процах (тестил на документах в 600-700 страниц), я пользовался только некоммерческими решениями, возможно вы найдете что-то быстрее, но парсить pdf вам придется явно не на ноде, т.к. это слишком медленно будет.
Ответ написан
Aetae
@Aetae
Тлен
Очевидно pdf -> картинка -> одна из множества технологий поиска по картинкам, на хабре полно статей.

Вот только сама задача - бред. PDF - это документ, документы имеют определённый формат и похожи друг на друга по умолчанию. Отличие документа от того же документа с подписью гендира технически - минимально, практически - абсолютно.

Так что выкиньте это из головы, и юзайте хэши.
Ответ написан
2ord
@2ord
Можно использовать что-то наподобие перцептивного хэша, а для определения схожести между документом и набором других использовать поиск по СУБД при помощи расстояния Хэмминга.

По описанию задачи перекликается с вопросом Как сравниваются перцептивные хэши?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы