2012-11-09 3 views
0

Я отправил yesturday о вычислении сходства в процентах разницы между двумя файлами, используя количество слов, которое появляется в 1, но не другое. Это был плохой способ выполнить работу, поэтому я подумал, что лучше было бы сделать контрольную сумму MD5 или CRC для обоих файлов и вычислить разницу, используя это. Сделать контрольную сумму легко, но я не уверен, как это сделать, чтобы определить разницу, я знаю, что процент идет по этому поводу линии:Вычислить сходство контрольной суммы

double sameWordPercentage = (1.0 * n/m) * 100; 
    Console.WriteLine(Math.Round(sameWordPercentage, 2) + "% Similar"); 

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

+1

.. ваш вопрос, как получить процентное отличие от хэша? Вы знаете, что будет очень неточно ..? –

+3

Криптографические хеши, такие как MD5, предназначены для получения совсем другого результата для очень небольших изменений. Они совершенно не подходят для определения сходства двух файлов. То же самое относится, хотя и в несколько меньшей степени, к контрольным суммам, таким как CRC. – dtb

+0

Что вы пытаетесь выполнить с этим индексом сходства? Сходство документов - очень активная тема исследования, и многие алгоритмы сходства существуют, некоторые из них очень просты, некоторые другие очень сложные. Лучший подход зависит от того, что вы собираетесь делать с этим индексом. – lstern

ответ

3

Оба MD5 и CRC являются алгоритмами хеширования, которые выводят очень разные результаты для аналогичных входов (и это по дизайну).

Я думаю, что вам лучше проверить некоторый алгоритм Locality-sensitive hashing, как MinHash, так как они рекомендуют в this question.

1

Любой хеш в нормальном значении будет потерять путь к большому количеству информации, чтобы сделать сравнение сходства значимым. Crypto хэши (MD5, SHA1/SHA256, ...) в значительной степени гарантируют, что они бесполезны для такого сравнения, поскольку они явно выражают очень разные значения от аналогичных входов.

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

Смежные вопросы