Метафон
Метафон — фонетический алгоритм , опубликованный Лоуренсом Филипсом в 1990 году, для индексации слов по их английскому произношению. [1] Он существенно совершенствует алгоритм Soundex , используя информацию об изменениях и несоответствиях в английском написании и произношении для создания более точной кодировки, которая лучше справляется с сопоставлением слов и имен, которые звучат одинаково. Как и в случае с Soundex, слова со схожим звучанием должны иметь одни и те же ключи. Метафон доступен в качестве встроенного оператора в ряде систем.
Позже Филипс выпустил новую версию алгоритма, которую он назвал Double Metaphone . В отличие от оригинального алгоритма, применение которого ограничено только английским языком, эта версия учитывает особенности правописания ряда других языков. В 2009 году Philips выпустила третью версию под названием Metaphone 3, которая обеспечивает точность примерно 99% для английских слов, неанглийских слов, знакомых американцам, а также имен и фамилий, обычно встречающихся в Соединенных Штатах, и была разработана в соответствии с современные инженерные стандарты против тестового набора подготовленных правильных кодировок.
Процедура
[ редактировать ]В исходных кодах Metaphone используются 16 согласных символов 0BFHJKLMNPRSTWXY. «0» представляет собой « th » (как ASCII- аппроксимацию Θ ), «X» представляет « sh » или « ch », а остальные представляют их обычное английское произношение. Гласные . AEIOU также используются, но только в начале кода [2] В этой таблице суммировано большинство правил исходной реализации:
- Отбросьте повторяющиеся соседние буквы, кроме C.
- Если слово начинается с «KN», «GN», «PN», «AE», «WR», опустите первую букву.
- Опустите букву «Б», если она стоит после «М» в конце слова.
- «C» преобразуется в «X», если за ним следует «IA» или «H» (если в последнем случае он не является частью «-SCH-», и в этом случае он преобразуется в «K»). «C» преобразуется в «S», если за ним следует «I», «E» или «Y». В противном случае «C» преобразуется в «K».
- «D» преобразуется в «J», если за ним следует «GE», «GY» или «GI». В противном случае «D» преобразуется в «T».
- Опустите букву «G», если за ней следует «H», а буква «H» не стоит в конце или перед гласной. Отбросьте букву «G», если за ней следует «N» или «NED» и она находится в конце.
- «G» преобразуется в «J», если перед «I», «E» или «Y» отсутствует «GG». В противном случае «G» преобразуется в «K».
- Опустите букву «H», если она стоит после гласной, а не перед гласной.
- «CK» преобразуется в «K».
- «PH» преобразуется в «F».
- «Q» трансформируется в «K».
- «S» преобразуется в «X», если за ним следует «H», «IO» или «IA».
- «T» преобразуется в «X», если за ним следует «IA» или «IO». «TH» преобразуется в «0». Отбросьте «T», если за ним следует «CH».
- «В» трансформируется в «Ф».
- «WH» преобразуется в «W», если находится в начале. Опустите букву W, если за ней не следует гласная.
- «X» преобразуется в «S», если находится в начале. В противном случае «X» преобразуется в «KS».
- Опустите букву «Y», если за ней не следует гласная.
- «Z» трансформируется в «S».
- Отбросьте все гласные, кроме начала.
Эта таблица не представляет собой полного описания исходного алгоритма Метафона, и алгоритм не может быть правильно закодирован на ее основе. Оригинальный Metaphone содержал много ошибок и был заменен Double Metaphone, а Double Metaphone и оригинальный Metaphone, в свою очередь, были заменены Metaphone 3, который исправляет тысячи ошибок кодирования, которые будут возникать в первых двух версиях.
Чтобы реализовать Metaphone без покупки копии (исходного кода) Metaphone 3, можно использовать эталонную реализацию Double Metaphone. [3] Альтернативно, версия 2.1.3 Metaphone 3, более ранняя версия 2009 года без ряда исправлений кодировки, внесенных в текущую версию, версию 2.5.4, стала доступной на условиях лицензии BSD через проект OpenRefine. [4]
Двойной Метафон
[ редактировать ]Алгоритм фонетического кодирования Double Metaphone представляет собой второе поколение этого алгоритма. Его реализация была описана в июньском выпуске журнала C/C++ Users Journal за 2000 год . [5] Он содержит ряд фундаментальных улучшений конструкции по сравнению с исходным алгоритмом Metaphone.
Он называется «Double», поскольку может возвращать как первичный, так и вторичный код строки; это объясняет некоторые неоднозначные случаи, а также несколько вариантов фамилий общего происхождения. Например, кодирование имени «Смит» дает первичный код SM0 и вторичный код XMT , а имя «Шмидт» дает первичный код XMT и вторичный код SMT — оба имеют XMT общий .
Метафон пытается объяснить множество нарушений в английском языке славянского германского , , , кельтского , греческого , французского , итальянского , испанского Двойной китайского и других языков. Таким образом, он использует гораздо более сложный набор правил для кодирования, чем его предшественник; например, он проверяет примерно 100 различных контекстов использования одной только буквы C.
Метафон 3
[ редактировать ]Профессиональная версия была выпущена в октябре 2009 года и разработана тем же автором, Лоуренсом Филипсом. Это коммерческий продукт, продаваемый в виде исходного кода. Metaphone 3 дополнительно улучшает фонетическое кодирование слов английского языка, неанглийских слов, знакомых американцам, а также имен и фамилий, обычно встречающихся в Соединенных Штатах. В частности, это значительно улучшает кодировку имен собственных. [6] Автор утверждает, что в целом это повышает точность всех слов примерно с 89% Двойного Метафона до 98%. Разработчики также теперь могут устанавливать переключатели в коде, чтобы алгоритм кодировал клавиши Metaphone 1) с учетом неначальных гласных, а также 2) по-разному кодировал звонкие и глухие согласные. Это позволяет более точно сфокусировать набор результатов, если разработчик обнаружит, что результаты поиска включают слишком много слов, которые недостаточно похожи на поисковый запрос. [7] Metaphone 3 продается как исходный код C++, Java, C#, PHP, Perl и PL/SQL, оболочки Ruby и Python с доступом к jar-файлу Java, а также Metaphone 3 для испанского и немецкого произношения, доступный как исходный код Java и C#. [8] Последней версией алгоритма Metaphone 3 является v2.5.4, выпущенная в марте 2015 года. Исходный код Metaphone3 Java для более ранней версии, 2.1.3, в котором отсутствует большое количество исправлений кодировки, внесенных в текущую версию, версию 2.5.4, был включен как часть проекта OpenRefine и доступен для публичного просмотра. [9]
Распространенные заблуждения
[ редактировать ]Существуют некоторые заблуждения относительно алгоритмов Metaphone, на которые следует обратить внимание. Следующие утверждения верны:
- Все они предназначены для обращения к обычным, «словарным» словам, а не только к именам и
- Метафонные алгоритмы не создают фонетических представлений входных слов и имен; скорее, результат представляет собой намеренно приближенное фонетическое представление в соответствии с этим стандартом:
- слова, начинающиеся с гласного звука, будут иметь букву «А», обозначающую любую гласную, в качестве первого символа кодировки (в Double Metaphone и Metaphone 3 - исходный Metaphone просто сохраняет фактическую гласную),
- гласные после начального гласного звука будут игнорироваться и не кодироваться, а
- Пары звонких и глухих согласных будут отображаться в одной и той же кодировке. (Примеры пар звонких/глухих согласных: D/T, B/P, Z/S, G/K и т. д.).
Эта приблизительная кодировка необходима для учета того, как носители английского языка меняют свое произношение и пишут с ошибками или иным образом меняют слова и имена, которые они пытаются написать. Гласные, конечно, очень изменчивы. Носители английского языка часто жалуются, что американцы произносят букву «Т» так же, как «Д». Учтите также, что все носители английского языка часто произносят букву «Z» там, где пишется «S», почти всегда, когда существительное, оканчивающееся на звонкую согласную или жидкость, стоит во множественном числе, например «сезоны», «лучи», «примеры», и т. д. Отсутствие кодирования гласных после начального гласного звука поможет сгруппировать слова, в которых гласная и согласная могут быть переставлены при неправильном написании или альтернативном произношении.
Метафон других языков
[ редактировать ]Метафон полезен для вариантов английского языках ему отдается предпочтение перед Soundex и других языков, поскольку в нескольких индоевропейских . С другой стороны, грубое фонетическое кодирование вызывает языковую зависимость — или, в языковом варианте, среднюю зависимость от носителя языка — главным образом для неанглийских вариантов.
Возможно, первым примером стабильной адаптации неанглийского метафона был бразильский португальский : он возник примерно в 2008 году как решение для базы данных в муниципалитете Варзеа-Паулиста в Бразилии и развился до нынешнего metaphone-ptbr
алгоритм .
См. также
[ редактировать ]- Каверфон
- Система идентификации и разведки штата Нью-Йорк
- Подход к рейтингу матчей
- Примерное соответствие строк
Ссылки
[ редактировать ]- ^ Висит на метафоне, Лоуренс Филипс. Компьютерный язык, Vol. 7, № 12 (декабрь) 1990 г.
- ^ «Морфедро – Технологии» . www.morfoedro.it . Проверено 16 мая 2018 г.
- ^ Филипс, Лоуренс (1999) [1998]. «Двойной метафон» (ДПП) . ГНУ Аспелл . Проверено 23 февраля 2024 г.
- ^ «ОткрытьУточнить» . Гитхаб . 19 мая 2022 г.
- ^ Филипс, Лоуренс (июнь 2000 г.). «Алгоритм поиска двойного метафона» . Журнал пользователей C/C++ . 18 (6): 38–43.
- ^ Гай, Идо; Ур, Сигалит; Ронен, Инбал; Вебер, Сара; Орал, Толга (2012). «Лучшие лица вперед: масштабное исследование поиска людей на предприятии» (PDF) . Архивировано из оригинала (PDF) 1 декабря 2023 года . Проверено 23 февраля 2024 г.
- ^ Аткинсон, Кевин. «Метафонный алгоритм Лоуренса Филипса» . aspell.net . Проверено 16 мая 2018 г.
- ^ «Антропоморфное программное обеспечение» . www.amorphics.com . Проверено 16 мая 2018 г.
- ^ «Исходный код OpenRefine для Metaphone3» . github.com . Проверено 2 ноября 2020 г.
Внешние ссылки
[ редактировать ]- Алгоритм двойного метафонного поиска , Лоуренс Филлипс, 1 июня 2000 г., доктор Доббс, оригинальная статья
Алгоритмы метафона для других языков
[ редактировать ]- Бразильский португальский на языке C. Метафон для бразильского португальского языка на языке C с портом PHP и PostgreSQL.
- Бразильский португальский на Java Метафон для бразильского португальского языка на Java.
- Испанский метафон в Python
- Алгоритм двойного метафона для Bangla
- Алгоритм двойного метафона для амхарского языка
- Русский Метафон в Ruby .
- Двойной метафон и метафон в JavaScript