сравнить короткие струны на разных языках для получения похожего звука - Soundex - это ответ?

Как я могу получить "рейтинг" звукового сходства для строки, написанной на одном языке, с другой строкой на другом языке: то есть алгоритм, который определит это

«Дэвид Леттерман» и «דוד לטרמן » - это строки, которые звучат одинаково.

-О, да, кстати, это на иврите, как вы уже догадались: «Дэвид Леттерман», и это звучит / произносится почти так же, как на английском языке ..

Единственный исходный материал, который у меня есть, - это строки в юникоде на соответствующих языках. То есть у меня нет фонем или фонетических транскрипций / переводов строк.

Я уже реализовал кое-что вроде настройки реализации Soundex, которая работает так себе. Это путь?


person RabinDev    schedule 26.05.2011    source источник
comment
Решение Dan04 работает как шарм: лучше, чем ожидалось. удалось объединить списки контактов названных лиц (первый + последний) со сравнением иврита / английского языка, дубликатами, орфографическими ошибками и аналогичным написанием имен на каждом языке и между этими языками. Статистики нет, но работает почти идеально.   -  person RabinDev    schedule 05.06.2011


Ответы (3)


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

Вы определенно не можете использовать правило о сохранении первой буквы имени, но мне это никогда не нравилось даже для латинского алфавита (потому что мне пришлось бы искать под буквами «E» и «Y» фамилию моей матери) . Я рекомендую обращаться с первой буквой, как со всеми остальными.

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

  • בוףפ 1
  • גזחךכסקש 2
  • דטת 3
  • ץצ 32
  • ל 4
  • םמןנ 5
  • ר 6
  • אהיע игнорируется

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

  • ו отображается в 1 (как английский V) в списке выше, но часто представляет собой O, U или W, и в этом случае его следует игнорировать в Soundex.
  • ח сложно классифицировать из-за отсутствия английского эквивалента. Я поместил его в категорию 2, потому что это (1) соответствует транслитерации «ch», а (2) позволяет ך / כ иметь ту же категорию с дагешем или без него.
  • Ашкеназское произношение разделит ת между 2 и 3 категориями.

Чтобы справиться с этим, вы можете сгенерировать несколько ключей Soundex для строки. Например, «שבת» будет отображаться как в 212, так и в 213.

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

  • ΒΠΦ 1
  • Ψ 12
  • ΓΖΚΞΣΧ 2
  • ΔΘΤ 3
  • Λ 4
  • ΜΝ 5
  • Ρ 6
  • ΑΕΗΙΟΥΩ игнорируется

или русский:

  • БВПФ 1
  • ГЖЗКСХЧШЩЩ 2
  • ДТ 3
  • Ц 32
  • Л 4
  • МН 5
  • Р 6
  • АЕЁИЙОУЪЫЬЭЮЯ игнорируется

(Обратите внимание, что некоторые из двоек могут быть 32, в зависимости от вашего соглашения о транслитерации.)


«Рейтинг» подобия можно получить на основе такой метрики, как длина самой длинной общей подпоследовательности или Расстояние Левенштейна для значений Soundex.

Например, вы можете определить «сходство» между двумя строками как 2 * lcslen (A, B) / (len (A) + len (B)), чтобы получить оценку от 0 до 1.

person dan04    schedule 29.05.2011

Я бы посоветовал изучить кодекс Daitch-Mokotoff Soundex (особенно хорошо работает с ивритом). Отметьте this, который принимает английские символы в качестве входных данных и this, который принимает символы иврита в качестве входных.

person Amnon    schedule 24.12.2012

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

Изучите метафон; однако он концептуально похож на Soundex и имеет аналогичные ограничения.

Я не знаю межъязыкового эквивалента.

Я не знаю, поможет ли IPA (международный фонетический алфавит). Вам нужно будет перевести английский и иврит на IPA, а затем использовать некоторую функцию подобия, чтобы связать родственные звуки.

person Jonathan Leffler    schedule 26.05.2011
comment
СПАСИБО. действительно, в моей настройке Soundex я изменил первую букву на иностранном языке на ее английский эквивалент. Следовательно, в такой реализации Soundex необходимо 2 сопоставления: сопоставление для каждого символа на иностранном языке с его точным английским эквивалентом и сопоставление каждой буквы в один из 6 наборов, которые используются для вычисления значения Soundex для строки. - person RabinDev; 27.05.2011