2009-07-24 3 views
1

У меня есть различные длины строк, которые полны символов Base64. Фактически они представляют собой данные для распознавания звука, которые отличаются по песне.Методы сопоставления строк путем преобразования в число?

Для удобства сравнения частей этих строк я разделяю их на 16-символьные подстроки. (что составляет около 1 секунды песни). Но в некоторых случаях я просто не могу сравнивать эти головы с головой. Я должен их измерять.

Например, по сравнению с «hellohellohelloo» и «hallohellohelloo» должен получить более близкое значение, то «hellohellohelloo» и «herehellohelloo» сравнение.

Есть ли алгоритм или theorical


Edit: Извините, я новичок здесь :) И я не мог заставить себя ясно. Вот некоторые комментарии, которые позволят мне понять и предложить идею.

Комментарий 1:

На самом деле я знаю о расстоянии Левенштейн, но проблема каждый раз, когда я сравнить две строки я должен построить матрицу сравнения, и что делает процесс поиска медленно. Если я могу преобразовать, например, hello в 4444 и hallo в 4443, я могу определить, как закрытые записи у меня есть для «привет», просто индексируя числовые значения.

Комментарий 2:

Может быть, я должен определить базовую постоянная длину строку (ы) и значение магазина расстояния от них в качестве значений индекса для строки. Это просто идея ?!

+0

Действительно ли ваши данные распознавания звука содержат читаемый текст? –

+0

Причина, по которой я спрашиваю, заключается в том, что если ваше преобразование в «текст» настолько хорошо, что вы можете выбрать слова или подобные, тогда да, простая реализация на уровне levenshtein или аналогичная работа будет работать. Если вся строка отличается из-за проблем с преобразованием, например, формы сигнала немного не в фазе, которая генерирует разные точки выборки, то levenshtein будет бесполезным. Можете ли вы опубликовать некоторые данные с вашего аудио? –

+0

Нет, это не текст. Он просто полон символов base64. –

ответ

0

расстояние Левенштейна будет, вероятно, поможет вам: http://en.wikipedia.org/wiki/Levenshtein_distance

Это, как правило, довольно быстро, и есть реализация в большинстве современных языков тоже.

+0

На самом деле я знаю о расстоянии Левенштейна, но проблема заключается в том, что каждый раз, когда я сравниваю две строки, мне приходится строить сравнительную матрицу, что делает процесс поиска медленным. Если я могу преобразовать, например, hello в 4444 и hallo в 4443, я могу определить, как закрытые записи у меня есть для «привет», просто индексируя числовые значения. Я думаю, что теперь я немного более ясен. :) –

+0

Может быть, я должен определить базовую строку (-ы) постоянной длины и сохранить значения расстояния из них в качестве значений индекса для строки. Это просто идея ?! –

+0

Я не специалист в этой области, но я уверен, что есть другие алгоритмы, похожие на Levenshtein's, возможно, ближе к тому, что вы ищете. Решение вашей проблемы также может быть в сочетании двух алгоритмов ... почему бы не работать с Levenshtein's и не добавлять анализ расстояния char-by-char (этот метод имеет имя, но ему не приходит в голову прямо сейчас><). Например: "Привет" против "Hally" дало бы что-то вроде: ч - ч = 0 е - а = 4 (б, в, г, д) л - л = 0 л - л = 0 o - y = 10 (p, q, r, s, t, u, v, w, x, y) Посмотрите, что я имею в виду? – Nicolas

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