сравнить короткие строки на разных языках на предмет одинакового звучания - является ли Soundex ответом? - PullRequest
8 голосов
/ 26 мая 2011

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

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 29 мая 2011

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

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

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

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

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

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

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

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

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

или русский:

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

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


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

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

2 голосов
/ 24 декабря 2012

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

1 голос
/ 26 мая 2011

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

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

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

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

...