Что такое алгоритм Metaphone 3?
Я хочу сам закодировать алгоритм Metaphone 3. Есть ли описание? Я знаю, что исходный код доступен для продажи, но это не то, что я ищу.
6 ответов
Ссылка @Bo теперь ссылается на (теперь defucnt) весь исходный код проекта.
Отсюда новая ссылка с прямой ссылкой на исходный код Metaphone 3 https://searchcode.com/codesearch/view/2366000/
Лоуренс Филипс
* * Метафон 3 предназначен для возврата приблизительного фонетического ключа (и альтернативного * приблизительного фонетического ключа, когда это необходимо), который должен быть одинаковым для английских * слов и большинства имен, знакомых в Соединенных Штатах, которые произносятся аналогично. * Значение ключа не предназначено для точного фонетического или даже фонематического * представления слова. Это связано с тем, что определенная степень "нечеткости" оказалась полезной для компенсации изменений в произношении, а также неверного произношения. Например, хотя американцы обычно не знают об этом, * буква "s" обычно произносится как "z" в конце таких слов, как "звуки".
* * "Примерный" аспект кодирования реализован в соответствии со следующими правилами:
* * (1) Все гласные кодируются в одно и то же значение - "А". Если для параметра encodeVowels
* установлено значение false, только начальные гласные будут кодироваться вообще. Если для encodeVowels
* установлено значение true, "A" будет кодироваться во всех местах слова, которые обычно произносятся гласными. "W" и "Y" рассматриваются как гласные. Хотя существуют различия в * произношении 'W' и 'Y' в разных обстоятельствах, которые приводят к тому, что они * классифицируются как гласные при одних обстоятельствах и как согласные в других, для целей * нечеткой составляющей Soundex и семейство алгоритмов Metaphone, они будут * всегда рассматриваться здесь как гласные.
* * (2) Озвученные и незвученные согласные пары отображаются на одно и то же кодированное значение. Это означает, что:
* 'D' и 'T' -> 'T'
* 'B' и 'P' -> 'P'
* 'G' и 'K' -> 'K'
* 'Z' и 'S' -> 'S'
* 'V' и 'F' -> 'F'
* * - В дополнение к вышеупомянутым голосовым / не голосовым правилам, 'CH' и 'SH' -> 'X', где 'X'
* представляет звуки "-SH-" и "-CH-" в кодировке Metaphone 3.
Поскольку автор (Лоуренс Филипс) решил коммерциализировать сам алгоритм, более чем вероятно, что вы не найдете описание. Хорошее место, чтобы спросить, было бы списком рассылки: https://lists.sourceforge.net/lists/listinfo/aspell-metaphone
но вы также можете получить исходный код (то есть комментарии к коду), чтобы понять, как работает алгоритм: http://code.google.com/p/google-refine/source/browse/trunk/main/src/com/google/refine/clustering/binning/Metaphone3.java?r=2029
Из Википедии алгоритм Metaphone
Метафон - это фонетический алгоритм, алгоритм, опубликованный в 1990 году для индексации слов по их английскому произношению. Он существенно улучшает алгоритм Soundex, используя информацию о вариациях и несоответствиях в английском правописании и произношении для получения более точной кодировки, которая лучше подходит для сопоставления слов и имен, которые звучат похоже [...]
Метафон 3 специально
[...] достигает точности приблизительно 99% для английских слов, неанглийских слов, знакомых американцам, и имен и фамилий, обычно встречающихся в Соединенных Штатах, которые были разработаны в соответствии с современными техническими стандартами в сравнении с испытательным комплектом подготовлены правильные кодировки.
Обзор алгоритма:
Алгоритм метафона работает, сначала удаляя неанглийские буквы и символы из обрабатываемого слова. Затем все гласные также отбрасываются, если только слово не начинается с начального гласного, и в этом случае все гласные, кроме начального, отбрасываются. Наконец, все согласные и группы согласных сопоставляются с их кодом Metaphone. Правила группировки согласных и их групп с последующим отображением на коды метафонов довольно сложны; для полного списка этих преобразований проверьте комментарии в разделе исходного кода.
Теперь на ваш реальный вопрос:
Если вас интересует специфика алгоритма Metaphone 3, я думаю, что вам не повезло (если вы не купите исходный код, не поймете его и не создадите его самостоятельно): весь смысл в том, чтобы не создавать алгоритм (из общедоступным является то, что вы не можете воссоздать его, не заплатив автору за его усилия по разработке (предоставление "точного алгоритма", который вы ищете, эквивалентно предоставлению самого кода). Рассмотрим приведенные выше цитаты: разработка алгоритма включала в себя "тестирование [...] кодировок". Если у вас не будет такого тестового жгута или вы не сможете его создать, вы не сможете повторить алгоритм.
С другой стороны, реализации первых двух итераций (Metaphone и Double Metaphone) находятся в свободном доступе (приведенная выше ссылка на Википедию содержит множество ссылок на реализации на разных языках для обоих), что означает, что у вас есть хорошая отправная точка для понимания того, что алгоритм примерно такой, а затем улучшайте его по своему усмотрению (например, создавая и используя соответствующий тестовый комплект).
Я думал, что неправильно отказывать общему сообществу в алгоритме (не в коде)
Продаю исходники, поэтому алгоритм не скрыт. Я прошу 40 долларов за копию исходного кода и прошу других людей, которые взимают плату за свое программное обеспечение или услуги, использующие Metaphone 3, заплатить мне лицензионный сбор, а также прошу, чтобы исходный код не распространялся другими людьми (кроме за исключение, которое я сделал для Google Refine — я могу только попросить вас не распространять копию Metaphone 3, найденную там, отдельно от пакета Refine.)
На самом деле Metaphone3 - это алгоритм со многими очень специфическими правилами, являющимися результатом анализа некоторых тестовых случаев. Так что это не только чистый алгоритм, но и дополнительные знания предметной области. Чтобы получить эти знания и конкретные правила, автор должен приложить немало усилий. Вот почему этот алгоритм не с открытым исходным кодом.
В любом случае, существует альтернатива с открытым исходным кодом: Double Metaphone. Смотрите здесь: https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/language/DoubleMetaphone.html
Это не коммерческий пост, и я не имею отношения к владельцу, но стоит сказать, что реализация Metaphone3 доступна как коммерческое программное обеспечение от его создателя amporphics.com . Похоже на его личный магазин. Это приложение Java, но я купил версию Python, и она отлично работает.
Почему Metaphone3?страница говорит:
Одним из распространенных способов устранения вариаций правописания является подход к базе данных. Была проделана очень впечатляющая работа по накоплению вариаций личных имен со всего мира. (Конечно, нам всегда очень приятно, когда компании, продающие эти базы данных в розницу, объявляют, что они также используют какую-то версию Metaphone для повышения своей гибкости :-))
Но - с этим подходом есть некоторые проблемы:
- Они работают хорошо только до тех пор, пока не встретят вариант написания или новое слово или имя, которых еще нет в их базе данных.
Тогда они вообще не работают.
Metaphone 3 - это алгоритмический подход, который предоставляет ключ фонетического поиска для всего, что вы в него вводите.
- Личные имена, то есть имена и фамилии, не совпадают с названиями компаний. Фактически, название компании или агентства может содержать слова любого рода, а не только названия. Решения для баз данных обычно не охватывают возможные варианты написания или, в этом отношении, орфографические ошибки для обычных словарных слов. Или, если они это сделают, не очень тщательно.
Metaphone 3 был разработан для учета всех вариантов написания, обычно встречающихся в английских словах, именах и фамилиях, встречающихся в Соединенных Штатах и Европе, и неанглийских словах, родное произношение которых знакомо американцам. Его не волнует, какое слово вы пытаетесь сопоставить.
Как бы то ни было, мы лицензировали код, поскольку он доступен по цене и прост в использовании. Пока не могу говорить о производительности. На PyPi есть хорошие альтернативы, но я пока не могу их найти.