Измеряете сходство между двумя двоичными файлами?

У меня есть два файла с кодировкой G729, я взял их версию для ПК. Я хочу измерить сходство между этими двумя файлами. эти файлы представляют собой двоичные файлы, поэтому, как можно измерить сходство между двоичными файлами, я написал код на C, который берет шаблоны из первого и ищет похожие во втором, но я хочу иметь меру сходства ... Я много искал в литературе, нашел Жаккара и других, но до сих пор не могу определить, кто из них подходит для моего дела. Заранее благодарим за помощь ..


person Dobs    schedule 06.10.2010    source источник
comment
en.wikipedia.org/wiki/Acoustic_fingerprint   -  person Vinko Vrsalovic    schedule 06.10.2010
comment
Как именно вы хотите определить количество «похожих»? Вы хотите получить абсолютную разницу для каждого образца? Значение R ^ 2 для регрессии наименьших квадратов? Какие это два файла?   -  person JoshD    schedule 06.10.2010
comment
Я хочу найти соотношение, которое определяет, насколько два файла похожи друг на друга ... два файла являются выходными данными кодека G729 ... мы можем взять кадры по 20 байтов из каждого файла и измерить сходство между этими двумя строками и взять среднее в конце ... хватит?   -  person Dobs    schedule 09.10.2010


Ответы (2)


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

person casablanca    schedule 06.10.2010
comment
прежде всего спасибо за ваш ответ ... я пытаюсь провести криптоанализ на уровне открытого текста ... я имею в виду на двоичном уровне ... я хочу сравнить вывод кодера ... спасибо - person Dobs; 09.10.2010

У меня была такая же потребность, и я придумал решение, которое в моем случае работает, но я не могу гарантировать, что оно универсально:

Я взял библиотеку, которая создает файлы diff. Для данных fileA и fileB эта библиотека создает третий файл fileDiff, который сообщает, как перейти от fileA к fileB, какие байты копировать, а какие добавить. (для получения дополнительной информации о формате: http://www.w3.org/TR/NOTE-gdiff-19970901.html)

с функцией я получаю процент. Я знаю, что это не на 100% реально, например, если у вас есть fileB, равный половине fileA, сходство функции составляет 100%.

Это реализация DiffWriter:

public class Distance implements DiffWriter {

    private long newData = 0;
    private long copiedData = 0;

    @Override
    public void flush() throws IOException {}

    @Override
    public void close() throws IOException {}

    @Override
    public void addData(byte arg0) throws IOException {
        newData++;
    }

    @Override
    public void addCopy(long arg0, int arg1) throws IOException {
        copiedData += arg1;
    }

    public double getSimilarity() {

        double a = (double) newData;
        double c = (double) copiedData;

        return (( c / (c + a) ) * 100.0);

    }

}

Вот как я это называю:

import com.nothome.delta.Delta;

    File f1 = new File(...);
    File f2 = new File(...);

            Distance dw = new Distance();

    try {
        new Delta().compute(f1, f2, dw);

        dw.getSimilarity();

    } catch (Exception e) {
        e.printStackTrace();
    }
person hurtledown    schedule 11.06.2013