2008-09-16 4 views
2

Предположим, у меня есть большая и законная коллекция музыки, которая была несогласованно помечена. Я хочу, чтобы нормализовать одно поле, например, исполнитель, так что, к примеру, следующие художники все стали одной художники:Как программно нормализовать музыкальные тэги?

  • Благодарный мертвец
  • благодарны мертвым
  • благодарен мертвым
  • благодарен dead, the

Итак ... Должен ли я смотреть на попытку сопоставления с большой базой данных, например freedb, или есть какой-то подход с более строгим подходом к строкам и т. д.?

Я пробовал код для прокрутки строк, чтобы выполнить проверки соответствия строк, а затем попытаться сопоставить их с высокочастотными данными в freedb с ограниченным успехом.

Больше идей?

ответ

3

Для этой проблемы я использовал MusicBrainz Picard, который берет звуковой отпечаток пальца, а затем автоматически заполняет правильные метки из своей БД. Я использовал его для заполнения дорожек, но я уверен, что это решит вашу проблему.

0
  1. Для чтения и записи тегов вам необходим базовый API.
  2. Укажите ключевой токен для такого исполнителя, поэтому каждая последовательность символов, которая будет соответствовать ему, будет добавлена ​​в коллекцию для токена,
  3. Для любого токена вам потребуется имя исполнителя, которое будет использоваться вместо оригинальных нескольких вариантов.
  4. Вы можете использовать RegEx или Parser решение для этого, что вам нравится больше ...

Приветствия.

0

Я бы сначала пошел с сортировочным подходом + ручной ручной монтаж.

Отсортировать их по имени, игнорируя нижние/верхние регистры и a/an/статьи в названии.

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

После этого алгоритм, который смотрит на 2-3 записи выше и ниже любой отдельной песни и вычисляет сходство имен, должен быть возможен.

Тогда это ручной работы оттуда. Я бы не стал доверять алгоритмам, чтобы автоматически пометить мою музыкальную библиотеку, они недостаточно хороши, даже не freedb.

1

Простой подход заключается в следующем,

  1. Получить список топ 1000 наиболее часто употребляемых английских слов и удалить их из всех тегов.
  2. Сделать все в нижнем регистре
  3. Сортировать

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

Таким образом, вы можете использовать измерение подобия между именами и кластерами. Предполагая, что вы имели такую ​​меру (я опишу простой в немного), то можно поступить следующим образом,

  1. Возьмем среднее и дисперсию схожести между песнями. Вы можете сделать это во всех песнях или образцах, если у вас их слишком много.

  2. Создайте пустой набор кластеров, C = {}.

  3. Итерации по всем песням, для каждой песни итерации по всем кластерам, если средний балл между песней и песнями в кластере выше 2 - 3 стандартных отклонений от среднего балла, затем добавьте его в кластер , Если нет такого кластера, а затем создать новый кластер с этой песней и добавить его в C.

Таким образом, «2 или 3» должны быть установлены самостоятельно вручную, но как только вы получили, что магический номер, процесс будет более или менее автоматическим.

Как только у вас есть эти кластеры, вам нужно создать представительное имя для этого кластера песен. Это можно сделать, просто взяв один случайным образом или попытавшись найти подобную песню в известном списке имен песен. Затем назначьте назначенное имя всем песням с именами в этом кластере.

Простая мера подобия, которая может работать хорошо, - это просто подсчитать количество подстрок длиной 1, 2, 3, ..., n, которые являются общими в обеих строках. Вы будете взвешивать подсчеты, как долго подстрока, например. разделение подстрок длиной 3 более значимо, чем длина 1. Затем, чтобы не смещать песни с действительно длинными именами, вы бы нормализовали оценку по длине сравниваемых названий песен.

С уважением,

Оуэн.

1

Python имеет очень полезную библиотеку под названием difflib. Особенно одна функция, difflib.get_close_matches(word, possibilities), была очень полезной даже при поиске дубликатов (или почти дубликатов) имен файлов. Кроме того, использование данных MusicBrainz может быть выполнено с помощью пакета musicbrainz2, а его сценарий findartist.py дает вам пример кода, используя ArtistFilter для нечетких результатов, которые вы могли бы использовать.