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] В этой таблице суммированы большинство правил в оригинальной реализации:
Эта таблица не представляет собой полное описание оригинального алгоритма 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.
Профессиональная версия была выпущена в октябре 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, которые следует рассмотреть. Следующие утверждения верны:
Это приблизительное кодирование необходимо для учета того, как носители английского языка меняют свое произношение и делают ошибки в написании или иным образом изменяют слова и имена, которые они пытаются написать. Гласные, конечно, известны своей большой изменчивостью. Носители британского языка часто жалуются, что американцы, кажется, произносят «T» так же, как «D». Примите во внимание также, что все носители английского языка часто произносят «Z» там, где пишется «S», почти всегда, когда существительное, оканчивающееся на звонкий согласный или плавный звук, имеет множественное число, например «seasons», «beams», «examples» и т. д. Не кодируя гласные после начального гласного звука, можно сгруппировать слова, в которых гласный и согласный могут быть переставлены местами при неправильном написании или альтернативном произношении.
Metaphone полезен для вариантов английского языка и других языков, будучи предпочтительнее Soundex в нескольких индоевропейских языках. С другой стороны, грубое фонетическое кодирование вызывает зависимость от языка — или, в варианте языка, зависимость от носителя языка — в основном для неанглийских вариантов.
Возможно, первым примером стабильной адаптации неанглоязычного метафона стал бразильский португальский язык : он появился примерно в 2008 году как решение для базы данных в муниципалитете Варзеа-Паулиста в Бразилии и развился в текущий алгоритм metaphone-ptbr.