Лучшая библиотека для нечеткого совпадения документов/текстовой отпечатки

Я собираюсь создать API, который позволит программе отправить "отпечаток пальца" академической публикации, сопоставить ее с базой данных статей из журналов открытого доступа, и если она найдена, отправьте пользователю каноническую цитату. Первоначально это было бы для конкретной небольшой области исследований, поэтому не обязательно было бы иметь дело с 20 миллионами работ, чтобы быть успешными (даже если бы 1000 наиболее часто цитируемых бумаг в этой области были охвачены, это было бы огромным благом для производительности и сотрудничество).

Интересно, какая библиотека (которая может взаимодействовать с Ruby, в идеале) была бы лучшей для этого "отпечатка пальца". Я видел нечеткое совпадение Lucene, но похоже, что он работает на уровне слов, тогда как в этом случае мы, вероятно, захотим представить гораздо большее подмножество документа. Причина для нечетких совпадений состоит в том, что некоторые люди могут иметь препринт Word.doc, некоторые могут иметь окончательный PDF и т.д.

Я действительно ценю некоторые идеи здесь. Googling для "перцептивного хэша" заставляет меня в кучу нового материала. Я попытался обобщить многие мои выводы здесь.

Кажется, что SimHash, например реализация C - это путь, но мне еще нужно поэкспериментировать.

Ответ 1

Вы можете использовать pHash для этого вида работы.

И этот камень поможет вам начать:

require 'phash/text'
Phash::Text.new('first.txt') % Phash::Text.new('second.txt')