Обновление: Теперь я написал расширение PHP с именем php_ssdeep для API-интерфейса ssdeep C для упрощения нечеткого хеширования и сравнения хешей в PHP. Больше информации можно найти в моем блоге . Я надеюсь, что это полезно для людей.
Я участвую в написании специального приложения для управления документами на PHP на Linux-боксе, в котором будут храниться различные форматы файлов (возможно, тысячи файлов), и мы должны иметь возможность проверить, был ли загружен текстовый документ, чтобы избежать дублирования в базе данных.
По сути, когда пользователь загружает новый файл, мы хотели бы иметь возможность представить ему список файлов, которые являются дубликатами или содержат аналогичное содержимое. Это позволит им выбрать один из ранее существующих документов или продолжить загрузку своих собственных.
Подобные документы будут определены путем просмотра их содержимого на предмет похожих отправок и, возможно, динамически генерируемого списка ключевых слов. Затем мы можем отобразить процент совпадения для пользователя, чтобы помочь им найти дубликаты.
Можете ли вы порекомендовать какие-либо пакеты для этого процесса и какие-либо идеи о том, как вы могли это сделать в прошлом?
Прямой дубликат, я думаю, можно сделать, получив весь текстовый контент и
- Удалять пробелы
- Удаление пунктуации
- Преобразовать в нижний или верхний регистр
затем сформируйте хеш MD5 для сравнения с любыми новыми документами. Удаление этих элементов должно помочь предотвратить обнаружение ошибок, если пользователь, например, редактирует документ, добавляя дополнительные разрывы абзацев. Есть мысли?
Этот процесс может также потенциально выполняться как ночная работа, и мы могли бы уведомлять пользователя о любых дубликатах при следующем входе в систему, если вычислительные требования слишком велики для выполнения в реальном времени. Однако в реальном времени предпочтительнее.