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

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

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

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

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

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

3 ответа

Решение

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

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

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

  • בוףפ → 1
  • 2 → 2
  • →ת → 3
  • 32 → 32
  • ל → 4
  • ןנמןנ → 5
  • ר → 6
  • אהיע → игнорируется

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

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

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

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

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

или русский

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

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


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

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

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

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

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

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

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

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