Метафон - это фонетический алгоритм, опубликованный Лоуренсом Филипсом в 1990 году для индексации слов по их английскому произношению. Он существенно улучшает алгоритм Soundex за счет использования информации о вариациях и несоответствиях в английском написании и произношении для получения более точной кодировки, которая лучше справляется с сопоставлением слов и имен, которые звучат одинаково. Как и в случае с Soundex, похожие по звучанию слова должны иметь одни и те же ключи. Метафон доступен как встроенный оператор в ряде систем.
Позднее Филипс создал новую версию алгоритма, которую назвал « Двойной метафон». В отличие от исходного алгоритма, применение которого ограничено только английским языком, эта версия учитывает особенности орфографии ряда других языков. В 2009 году Philips выпустила третью версию под названием Metaphone 3, которая обеспечивает точность примерно 99% для английских слов, неанглийских слов, знакомых американцам, а также имен и фамилий, обычно встречающихся в Соединенных Штатах, и была разработана в соответствии с современные инженерные стандарты в сравнении с тестовым набором подготовленных правильных кодировок.
Исходные коды Метафона используют 16 согласных символов 0BFHJKLMNPRSTWXY. «0» представляет « th » (как приближение ASCII к Θ ), «X» представляет « sh » или « ch », а остальные представляют их обычное английское произношение. В гласные AEIOU также используются, но только в начале кода. В этой таблице обобщено большинство правил исходной реализации:
Эта таблица не является полным описанием исходного алгоритма Metaphone, и алгоритм не может быть правильно закодирован из нее. Оригинальный Metaphone содержал много ошибок и был заменен на Double Metaphone, а на смену Double Metaphone и оригинальный Metaphone пришел Metaphone 3, который исправляет тысячи неправильных кодировок, которые будут произведены в первых двух версиях.
Для реализации Metaphone без покупки копии Metaphone 3 (исходный код), можно использовать эталонную реализацию Double Metaphone. В качестве альтернативы, версия 2.1.3 Metaphone 3, более ранняя версия 2009 года без ряда исправлений кодировки, сделанных в текущей версии, версии 2.5.4, стала доступной в соответствии с условиями лицензии BSD через проект OpenRefine.
Алгоритм фонетического кодирования Double Metaphone является вторым поколением этого алгоритма. Его реализация была описана в июньском выпуске журнала C / C ++ Users Journal за 2000 год. По сравнению с исходным алгоритмом Metaphone, он вносит ряд фундаментальных улучшений в дизайн.
Он называется «Double», потому что может возвращать как первичный, так и вторичный код для строки; это объясняет некоторые неоднозначные случаи, а также несколько вариантов фамилий с общим происхождением. Например, кодирование имени «Смит» дает первичный код SM0 и вторичный код XMT, в то время как имя «Шмидт» дает первичный код XMT и вторичный код SMT - оба имеют общий XMT.
Двойная Metaphone пытается внимание на мириады нарушений в английском языке из славянских, германских, кельтских, греческом, французском, итальянском, испанском, китайских и других источников. Таким образом, он использует гораздо более сложный набор правил для кодирования, чем его предшественник; например, он проверяет примерно 100 различных контекстов использования одной только буквы C.
В октябре 2009 года была выпущена профессиональная версия, разработанная тем же автором, Лоуренсом Филипсом. Это коммерческий продукт, который продается как исходный код. Metaphone 3 дополнительно улучшает фонетическое кодирование слов английского языка, неанглийских слов, знакомых американцам, а также имен и фамилий, обычно встречающихся в Соединенных Штатах. Это, в частности, значительно улучшает кодирование имен собственных. Автор утверждает, что в целом он улучшает точность всех слов с примерно 89% в Double Metaphone до 98%. Разработчики также могут теперь устанавливать переключатели в коде, чтобы заставить алгоритм кодировать ключи Метафона 1) с учетом не начальных гласных, а также 2) по-разному кодировать звонкие и глухие согласные. Это позволяет более точно сфокусировать набор результатов, если разработчик обнаруживает, что результаты поиска содержат слишком много слов, которые недостаточно похожи на поисковый запрос. Metaphone 3 продается как исходный код C ++, Java, C #, PHP, Perl и PL / SQL, оболочки Ruby и Python с доступом к банке Java, а также Metaphone 3 для испанского и немецкого произношения, доступный как исходный код Java и C #. Последней версией алгоритма Metaphone 3 является v2.5.4, выпущенная в марте 2015 года. Исходный код Java Metaphone3 для более ранней версии 2.1.3, в которой отсутствовало большое количество исправлений кодировки, внесенных в текущую версию 2.5.4, был включен как часть проекта OpenRefine и доступен для публичного просмотра.
Есть некоторые заблуждения об алгоритмах Metaphone, которые следует устранить. Верны следующие утверждения:
Эта приблизительная кодировка необходима для учета того, как носители английского языка изменяют свое произношение и орфографические ошибки или иным образом меняют слова и имена, которые они пытаются написать. Гласные, как известно, очень разнообразны. Британцы часто жалуются, что американцы произносят «Т» так же, как «Д». Учтите также, что все носители английского языка часто произносят 'Z' там, где пишется 'S', почти всегда, когда существительное, оканчивающееся на звонкий согласный или жидкость, имеет множественное число, например, «времена года», «лучи», «примеры», и т. д. Отсутствие кодирования гласных после начального гласного звука поможет сгруппировать слова, в которых гласная и согласная могут быть переставлены при неправильном написании или альтернативном произношении.
Метафон полезен для вариантов на английском и других языках, в некоторых индоевропейских языках предпочтение было отдано SONDEX. С другой стороны, грубое фонетическое кодирование вызывает языковую зависимость - или, в языковом варианте, зависимость среднего языка от говорящего - в основном для неанглийских вариантов.
Возможно, первым примером стабильной адаптации неанглийского метафона был бразильский португальский язык : он возник примерно в 2008 году как решение для базы данных в муниципалитете Варзеа-Паулиста в Бразилии и эволюционировал в текущий metaphone-ptbr
алгоритм.