Метафон

Фонетический алгоритм индексации слов

Metaphoneфонетический алгоритм , опубликованный Лоуренсом Филипсом в 1990 году для индексации слов по их английскому произношению. [1] Он существенно улучшает алгоритм Soundex , используя информацию о вариациях и несоответствиях в английском написании и произношении для создания более точного кодирования, которое лучше справляется с сопоставлением слов и имен, которые звучат похоже. Как и в Soundex, похожие по звучанию слова должны иметь одни и те же ключи. Metaphone доступен как встроенный оператор в ряде систем.

Philips позже выпустил новую версию алгоритма, которую он назвал Double Metaphone. В отличие от оригинального алгоритма, применение которого ограничивалось только английским языком, эта версия учитывает особенности правописания ряда других языков. В 2009 году Philips выпустил третью версию, названную Metaphone 3, которая достигает точности приблизительно 99% для английских слов, неанглийских слов, знакомых американцам, а также имен и фамилий, обычно встречающихся в Соединенных Штатах, будучи разработанной в соответствии с современными инженерными стандартами с использованием тестового набора подготовленных правильных кодировок.

Процедура

Оригинальные коды Metaphone используют 16 согласных символов 0BFHJKLMNPRSTWXY. [2] '0' представляет " th " (как приближение ASCII к Θ ), 'X' представляет " sh " или " ch ", а остальные представляют их обычное английское произношение. Гласные AEIOU также используются, но только в начале кода. [3] В этой таблице суммированы большинство правил в оригинальной реализации:

  1. Удалите повторяющиеся соседние буквы, кроме буквы C.
  2. Если слово начинается с «KN», «GN», «PN», «AE», «WR», отбросьте первую букву.
  3. Если в конце слова стоит буква «Б», то ее следует опустить.
  4. «C» трансформируется в «X», если за ним следует «IA» или «H» (если только в последнем случае он не является частью «-SCH-», в таком случае он трансформируется в «K»). «C» трансформируется в «S», если за ним следует «I», «E» или «Y». В противном случае «C» трансформируется в «K».
  5. «D» трансформируется в «J», если за ним следует «GE», «GY» или «GI». В противном случае «D» трансформируется в «T».
  6. Отбросьте «G», если за ней следует «H» и «H» не находится в конце или перед гласной. Отбросьте «G», если за ней следует «N» или «NED» и она находится в конце.
  7. 'G' трансформируется в 'J', если стоит перед 'I', 'E' или 'Y', и не находится в 'GG'. В противном случае 'G' трансформируется в 'K'.
  8. Опускайте «H», если она стоит после гласной, но не перед гласной.
  9. «CK» трансформируется в «K».
  10. «PH» трансформируется в «F».
  11. «Q» трансформируется в «K».
  12. «S» трансформируется в «X», если за ним следует «H», «IO» или «IA».
  13. «T» трансформируется в «X», если за ним следует «IA» или «IO». «TH» трансформируется в «0». Опустите «T», если за ним следует «CH».
  14. «V» трансформируется в «F».
  15. «WH» трансформируется в «W», если стоит в начале. «W» отбрасывается, если за ним не следует гласная.
  16. 'X' трансформируется в 'S', если в начале. В противном случае 'X' трансформируется в 'KS'.
  17. Если за «Y» не следует гласная, отбросьте ее.
  18. «Z» трансформируется в «S».
  19. Отбросьте все гласные, если только это не начало.

Эта таблица не представляет собой полное описание оригинального алгоритма Metaphone, и алгоритм не может быть правильно закодирован из нее. Оригинальный Metaphone содержал много ошибок и был заменен Double Metaphone, а в свою очередь Double Metaphone и оригинальный Metaphone были заменены Metaphone 3, который исправляет тысячи ошибок кодирования, которые будут произведены первыми двумя версиями.

Чтобы реализовать Metaphone без покупки копии (исходного кода) Metaphone 3, можно использовать эталонную реализацию Double Metaphone. [4] В качестве альтернативы, версия 2.1.3 Metaphone 3, более ранняя версия 2009 года без ряда исправлений кодирования, внесенных в текущую версию, версию 2.5.4, стала доступна в соответствии с условиями лицензии BSD через проект OpenRefine. [5]

Двойной метафон

Алгоритм фонетического кодирования Double Metaphone является вторым поколением этого алгоритма. Его реализация была описана в выпуске C/C++ Users Journal за июнь 2000 года . [6] Он вносит ряд фундаментальных улучшений в конструкцию по сравнению с исходным алгоритмом Metaphone.

Он называется «Double», потому что может возвращать как первичный, так и вторичный код для строки; это объясняет некоторые неоднозначные случаи, а также множественные варианты фамилий с общим происхождением. Например, кодирование имени «Smith» дает первичный код SM0 и вторичный код XMT , в то время как имя «Schmidt» дает первичный код XMT и вторичный код SMT — оба имеют общий XMT .

Double Metaphone пытается учесть множество неточностей в английском языке славянского , германского , кельтского , греческого , французского , итальянского , испанского , китайского и других языков. Таким образом , он использует гораздо более сложный набор правил для кодирования, чем его предшественник; например, он проверяет около 100 различных контекстов использования одной только буквы C.

Метафон 3

Профессиональная версия была выпущена в октябре 2009 года, разработанная тем же автором, Лоуренсом Филипсом. Это коммерческий продукт, продаваемый в виде исходного кода. Metaphone 3 дополнительно улучшает фонетическое кодирование слов на английском языке, неанглийских слов, знакомых американцам, а также имен и фамилий, обычно встречающихся в Соединенных Штатах. Он улучшает кодирование имен собственных, в частности, в значительной степени. [7] Автор утверждает, что в целом он повышает точность для всех слов с приблизительно 89% Double Metaphone до 98%. Разработчики также теперь могут устанавливать переключатели в коде, чтобы заставить алгоритм кодировать ключи Metaphone 1) принимая во внимание не начальные гласные, а также 2) кодируя звонкие и глухие согласные по-разному. Это позволяет более точно сфокусировать набор результатов, если разработчик обнаружит, что результаты поиска включают слишком много слов, которые недостаточно похожи на поисковый запрос. [8] Metaphone 3 продается как исходный код C++, Java, C#, PHP, Perl и PL/SQL, оболочки Ruby и Python, имеющие доступ к Java jar, а также Metaphone 3 для испанского и немецкого произношения, доступный как исходный код Java и C#. [9] Последняя версия алгоритма Metaphone 3 — v2.5.4, выпущенная в марте 2015 года. Исходный код Metaphone3 Java для более ранней версии, 2.1.3, в котором отсутствует большое количество исправлений кодирования, внесенных в текущую версию, версию 2.5.4, был включен как часть проекта OpenRefine и доступен для публичного просмотра. [10]

Распространенные заблуждения

Существуют некоторые заблуждения относительно алгоритмов Metaphone, которые следует рассмотреть. Следующие утверждения верны:

  1. Все они предназначены для работы с обычными, «словарными» словами, а не только с именами, и
  2. Алгоритмы метафона не создают фонетические представления входных слов и имен; вместо этого выходными данными является намеренно приблизительное фонетическое представление, согласно следующему стандарту:
  • слова, начинающиеся с гласного звука, будут иметь букву «A», представляющую любую гласную, в качестве первого символа кодировки (в Double Metaphone и Metaphone 3 — оригинальный Metaphone просто сохраняет фактическую гласную),
  • гласные после начального гласного звука будут игнорироваться и не кодироваться, и
  • Пары звонких/глухих согласных будут сопоставлены с одной и той же кодировкой. (Примерами пар звонких/глухих согласных являются D/T, B/P, Z/S, G/K и т. д.).

Это приблизительное кодирование необходимо для учета того, как носители английского языка меняют свое произношение и делают ошибки в написании или иным образом изменяют слова и имена, которые они пытаются написать. Гласные, конечно, известны своей большой изменчивостью. Носители британского языка часто жалуются, что американцы, кажется, произносят «T» так же, как «D». Примите во внимание также, что все носители английского языка часто произносят «Z» там, где пишется «S», почти всегда, когда существительное, оканчивающееся на звонкий согласный или плавный звук, имеет множественное число, например «seasons», «beams», «examples» и т. д. Не кодируя гласные после начального гласного звука, можно сгруппировать слова, в которых гласный и согласный могут быть переставлены местами при неправильном написании или альтернативном произношении.

Метафон других языков

Metaphone полезен для вариантов английского языка и других языков, будучи предпочтительнее Soundex в нескольких индоевропейских языках. С другой стороны, грубое фонетическое кодирование вызывает зависимость от языка — или, в варианте языка, зависимость от носителя языка — в основном для неанглийских вариантов.

Возможно, первым примером стабильной адаптации неанглоязычного метафона стал бразильский португальский язык : он появился примерно в 2008 году как решение для базы данных в муниципалитете Варзеа-Паулиста в Бразилии и развился в текущий алгоритм metaphone-ptbr.

Смотрите также

Ссылки

  1. Hanging on the Metaphone, Лоуренс Филипс. Computer Language, том 7, № 12 (декабрь), 1990.
  2. ^ "Альтернатива Soundex". www.sound-ex.com . Архивировано из оригинала 6 марта 2014 года . Получено 16 мая 2018 года .
  3. ^ "Morfoedro - Technology". www.morfoedro.it . Получено 16 мая 2018 г. .
  4. ^ Philips, Lawrence (1999) [1998]. "Double Metaphone" (CPP) . GNU Aspell . Получено 23 февраля 2024 г.
  5. ^ "OpenRefine". Гитхаб . 19 мая 2022 г.
  6. ^ Филипс, Лоуренс (июнь 2000 г.). «Алгоритм поиска двойного метафона». Журнал пользователей C/C++ . 18 (6): 38–43 .
  7. ^ Гай, Идо; Ур, Сигалит; Ронен, Инбал; Вебер, Сара; Орал, Толга (2012). «Best Faces Forward: крупномасштабное исследование поиска людей на предприятии» (PDF) . Архивировано из оригинала (PDF) 1 декабря 2023 г. . Получено 23 февраля 2024 г. .
  8. ^ Аткинсон, Кевин. «Алгоритм метафона Лоуренса Филипса». aspell.net . Получено 16 мая 2018 г.
  9. ^ "Anthropomorphic Software". www.amorphics.com . Получено 16 мая 2018 г. .
  10. ^ "OpenRefine source for Metaphone3". github.com . Получено 2 ноября 2020 г. .
  • Алгоритм поиска двойного метафона, Лоуренс Филлипс, 1 июня 2000 г., Dr Dobb's, Оригинальная статья

Алгоритмы метафона для других языков

  • Бразильский португальский на языке C Metaphone для бразильского португальского языка на языке C с портом PHP и PostgreSQL.
  • Бразильский португальский на языке Java Метафон для бразильского португальского на языке Java.
  • Испанский метафон на Python
  • Алгоритм Double Metaphone для бенгальских языков
  • Алгоритм Double Metaphone для амхарского языка
  • Русский метафон в Ruby.
  • Двойной Метафон и Метафон в JavaScript
Взято с "https://en.wikipedia.org/w/index.php?title=Metaphone&oldid=1266604258"