Как определить, соответствуют ли две одинаковые имена групп одной и той же группе?

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

В основном я ищу какое-то направление для лучшего метода определения того, совпадают ли два имени. Например:

  • Название нашей базы данных - "Свиньи и свисток"
  • сервис 1 - "Свиньи и свисток"
  • сервис 2 - "Свиньи и свисток"
  • и т.д.

Я думаю, что главными отличиями будут такие вещи, как отсутствие "the" или использование "&". вместо "и", но также могут быть такие вещи, как несколько разные слова и слова в разных порядках.

Какие алгоритмы/методы обычно используются в этой ситуации, нужно ли фильтровать шумовые слова или выполнять какой-либо тип проверки орфографии?

Вы видели какие-то примеры чего-то simlar в С#?

UPDATE: если кто-то заинтересован в примере aС#, вы можете получить кучу, выполнив поиск кода google для расстояния Levenshtein

Ответы

Ответ 1

Канонический (и, возможно, самый простой) способ сделать это - измерить расстояние Левенштейна между двумя строки. Если расстояние невелико относительно размера строки, это, вероятно, одна и та же строка. Обратите внимание: если вам нужно сравнить много очень маленьких строк, будет сложнее сказать, одинаковы они или нет. Он работает лучше с более длинными строками.

Более разумный подход может заключаться в сравнении расстояния Левенштейна между двумя строками, но для того, чтобы назначить расстояние от нуля до более очевидных преобразований, таких как "и" / "&", "Snoop Doggy Dogg" / "Snoop", и др.

Ответ 2

Я сделал что-то подобное раньше, я использовал базу данных Discogs (которая является общедоступной), которая также отслеживает псевдонимы художников;

Вы можете:

  • Используйте API-вызов (namevariations).
  • Загрузите ежемесячные дампы данных (*_artists.xml.gz) и импортируйте их в свою базу данных. Это содержит те же данные, но, очевидно, намного быстрее.

Одно из преимуществ этого решения Левенштейн расстояние - это то, что вы получите намного меньше ложных матчей.
Например, Ryan Adams и Bryan Adams имеют оценку 2, что неплохо (более низкие совпадения лучше, Pig and Whistle и Pig & Whistle имеют оценку 3), но они явно отличаются люди.

В то время как вы могли бы сделать более разумный алгоритм (который также смотрит на длину строки, например), использование DB псевдонима намного проще и меньше ошибок; после реализации этого я мог бы полностью удалить решение, которое было предложено в другом ответе, и иметь лучшие совпадения.

Ответ 3

soundex также может быть полезно

Ответ 4

В биоинформатике мы используем это для сравнения последовательностей ДНК- или белков.

Есть много алгоритмов, вы, вероятно, хотите посмотреть на глобальные выравнивания.

В этом отношении алгоритм Needleman-Wunsch, вероятно, вы ищете.

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