Какой алгоритм строкового расстояния наиболее подходит для сравнения названий телешоу?

Я пишу скребок для ТВ-шоу и других материалов (игры, фильмы и т. Д.), И не все источники форматируются одинаковым образом для определенного шоу. Например, один источник может представлять субтитры с тире, другие точки с запятой. В настоящее время я использую расстояние Левенштейна, чтобы сравнить извлеченные данные с данными, извлеченными из имени файла телешоу, но мне было интересно, был ли алгоритм разработан для коротких строк длиной меньше предложения. Есть ли алгоритм, который лучше подходит для этой потребности?

1 ответ

Решение

Перед сравнением / измерением расстояния следует нормализовать (стандартизировать) заголовки.

Нормализация должна включать такие вещи, как:

  • Основное форматирование (например, кодировка UTF16, без начальных / конечных пробелов и вкладок)
  • Алфавитные правила (например, заменить Ä на A)
  • Расширение аббревиатуры (например, Нью-Йорк -> Нью-Йорк)
  • Правила названий мест (например, названия городов не должны содержать пробелов, но должны быть тире)
  • Правила использования заглавных букв (например, каждая буква после тире должна быть заглавной)
  • Удаление символов (например,!,?)
  • Преобразование чисел ("триста" в "300")
  • Преобразование римских чисел (например, "Людовик XVI" в "Людовик 16")
  • Неамериканский английский - американский английский (например, от "color" до "color")
  • Правила сокращений (например, "Inc." вместо "Incorporated", "vs." вместо "против")

Вы можете использовать расстояние Левенштейна между парами слов (не используйте его для всего предложения), но реализуйте некоторое скользящее окно, поскольку некоторые слова (например, "The") могут отсутствовать в одном из представлений.

Другие вопросы по тегам