Metaphone es un algoritmo fonético , publicado por Lawrence Philips en 1990, para indexar palabras por su pronunciación en inglés. [1] Mejora fundamentalmente el algoritmo Soundex mediante el uso de información sobre variaciones e inconsistencias en la ortografía y pronunciación del inglés para producir una codificación más precisa, que hace un mejor trabajo al hacer coincidir palabras y nombres que suenan similares. Al igual que con Soundex, las palabras con un sonido similar deben compartir las mismas claves. Metaphone está disponible como operador integrado en varios sistemas.
Philips produjo más tarde una nueva versión del algoritmo, al que llamó Double Metaphone . A diferencia del algoritmo original, cuya aplicación se limita únicamente al inglés, esta versión tiene en cuenta las peculiaridades ortográficas de varios otros idiomas. En 2009, Philips lanzó una tercera versión, llamada Metaphone 3, que alcanza una precisión de aproximadamente el 99% para palabras en inglés, palabras que no son del inglés conocidas por los estadounidenses y nombres y apellidos que se encuentran comúnmente en los Estados Unidos, habiendo sido desarrollado de acuerdo con estándares de ingeniería moderna contra un conjunto de pruebas de codificaciones correctas preparadas.
Procedimiento
Los códigos originales de Metaphone usan los 16 símbolos consonantes 0BFHJKLMNPRSTWXY. El '0' representa " th " (como una aproximación ASCII de Θ ), 'X' representa " sh " o " ch ", y los demás representan sus pronunciaciones habituales en inglés. Los vocales AEIOU también se utilizan, pero sólo al principio del código. [2] Esta tabla resume la mayoría de las reglas de la implementación original:
- Suelta las letras adyacentes duplicadas, excepto C.
- Si la palabra comienza con 'KN', 'GN', 'PN', 'AE', 'WR', elimine la primera letra.
- Suelta 'B' si después de 'M' al final de la palabra.
- 'C' se transforma en 'X' si le sigue 'IA' o 'H' (a menos que en este último caso, sea parte de '-SCH-', en cuyo caso se transforma en 'K'). 'C' se transforma en 'S' si va seguida de 'I', 'E' o 'Y'. De lo contrario, 'C' se transforma en 'K'.
- 'D' se transforma en 'J' si va seguida de 'GE', 'GY' o 'GI'. De lo contrario, 'D' se transforma en 'T'.
- Elimine 'G' si va seguida de 'H' y 'H' no está al final o antes de una vocal. Suelta 'G' si está seguida de 'N' o 'NED' y está al final.
- 'G' se transforma en 'J' si está antes de 'I', 'E' o 'Y', y no está en 'GG'. De lo contrario, 'G' se transforma en 'K'.
- Elimine 'H' si está después de una vocal y no antes de una vocal.
- 'CK' se transforma en 'K'.
- 'PH' se transforma en 'F'.
- 'Q' se transforma en 'K'.
- 'S' se transforma en 'X' si va seguida de 'H', 'IO' o 'IA'.
- 'T' se transforma en 'X' si va seguida de 'IA' o 'IO'. 'TH' se transforma en '0'. Suelta 'T' si va seguida de 'CH'.
- 'V' se transforma en 'F'.
- 'WH' se transforma en 'W' si está al principio. Elimina la 'W' si no va seguida de una vocal.
- 'X' se transforma en 'S' si está al principio. De lo contrario, 'X' se transforma en 'KS'.
- Suelta 'Y' si no va seguida de una vocal.
- 'Z' se transforma en 'S'.
- Elimina todas las vocales a menos que sea el principio.
Esta tabla no constituye una descripción completa del algoritmo original de Metaphone, y el algoritmo no se puede codificar correctamente a partir de él. Original Metaphone contenía muchos errores y fue reemplazado por Double Metaphone, y a su vez, Double Metaphone y Metaphone original fueron reemplazados por Metaphone 3, que corrige miles de errores de codificación que serán producidos por las dos primeras versiones.
Para implementar Metaphone sin comprar una copia (código fuente) de Metaphone 3, se puede utilizar la implementación de referencia de Double Metaphone. [3] Alternativamente, la versión 2.1.3 de Metaphone 3, una versión anterior de 2009 sin una serie de correcciones de codificación realizadas en la versión actual, la versión 2.5.4, se ha puesto a disposición bajo los términos de la licencia BSD a través del proyecto OpenRefine. [4]
Metaphone doble
El algoritmo de codificación fonética de Double Metaphone es la segunda generación de este algoritmo. Su implementación se describió en la edición de junio de 2000 de C / C ++ Users Journal . [5] Hace una serie de mejoras de diseño fundamentales sobre el algoritmo original de Metaphone.
Se llama "Doble" porque puede devolver un código primario y secundario para una cadena; esto explica algunos casos ambiguos, así como múltiples variantes de apellidos con ascendencia común. Por ejemplo, codificar el nombre "Smith" produce un código primario de SM0 y un código secundario de XMT , mientras que el nombre "Schmidt" produce un código primario de XMT y un código secundario de SMT; ambos tienen XMT en común.
Double Metaphone intenta dar cuenta de innumerables irregularidades en inglés de origen eslavo , germánico , celta , griego , francés , italiano , español , chino y otros orígenes. Por tanto, utiliza un conjunto de reglas de codificación mucho más complejo que su predecesor; por ejemplo, prueba para aproximadamente 100 contextos diferentes del uso de la letra C sola.
Metaphone 3
En octubre de 2009 se publicó una versión profesional, desarrollada por el mismo autor, Lawrence Philips. Es un producto comercial vendido como código fuente. Metaphone 3 mejora aún más la codificación fonética de palabras en el idioma inglés, palabras que no están en inglés y que son familiares para los estadounidenses, y nombres y apellidos que se encuentran comúnmente en los Estados Unidos. Mejora considerablemente la codificación de los nombres propios en particular. [6] El autor afirma que, en general, mejora la precisión de todas las palabras desde aproximadamente el 89% de Double Metaphone hasta el 98%. Los desarrolladores ahora también pueden configurar interruptores en el código para hacer que el algoritmo codifique las teclas de Metaphone 1) teniendo en cuenta las vocales no iniciales, así como 2) codificando consonantes sonoras y sordas de manera diferente. Esto permite que el conjunto de resultados se enfoque más de cerca si el desarrollador encuentra que los resultados de la búsqueda incluyen demasiadas palabras que no se parecen lo suficiente al término de búsqueda. [7] Metaphone 3 se vende como fuente C ++, Java, C #, PHP, Perl y PL / SQL, envoltorios Ruby y Python que acceden a un jar de Java, y también Metaphone 3 para pronunciación en español y alemán disponible como fuente Java y C #. [8] La última revisión del algoritmo Metaphone 3 es la v2.5.4, publicada en marzo de 2015. El código fuente Java de Metaphone3 para una versión anterior, 2.1.3, carece de una gran cantidad de correcciones de codificación realizadas en la versión actual, la versión 2.5. 4, se incluyó como parte del proyecto OpenRefine y se puede ver públicamente. [9]
Conceptos erróneos comunes
Hay algunos conceptos erróneos sobre los algoritmos de Metaphone que deberían abordarse. Las siguientes afirmaciones son verdaderas:
- Todos ellos están diseñados para abordar palabras normales de "diccionario", no solo nombres, y
- Los algoritmos de metafonía no producen representaciones fonéticas de las palabras y nombres de entrada; más bien, la salida es una representación fonética intencionalmente aproximada , de acuerdo con este estándar:
- las palabras que comienzan con un sonido de vocal tendrán una 'A', que representa cualquier vocal, como primer carácter de la codificación (en Double Metaphone y Metaphone 3 - el Metaphone original solo conserva la vocal real),
- las vocales después de un sonido de vocal inicial se ignorarán y no se codificarán, y
- Los pares de consonantes sonoras / sordas se asignarán a la misma codificación. (Ejemplos de pares de consonantes sonoras / sordas son D / T, B / P, Z / S, G / K, etc.).
Esta codificación aproximada es necesaria para tener en cuenta la forma en que los angloparlantes varían sus pronunciaciones y escriben mal o de otra manera varían las palabras y los nombres que están tratando de escribir. Las vocales, por supuesto, son muy variables. Los hablantes británicos a menudo se quejan de que los estadounidenses parecen pronunciar "T" igual que "D". Considere, también, que todos los hablantes de inglés a menudo pronuncian 'Z' donde se escribe 'S', casi siempre cuando un sustantivo que termina en una consonante sonora o un líquido está pluralizado, por ejemplo, "estaciones", "haces", "ejemplos", etc. No codificar las vocales después de un sonido de vocal inicial ayudará a agrupar las palabras donde una vocal y una consonante pueden transponerse en la pronunciación incorrecta o alternativa.
Metaphone de otros idiomas
Metaphone es útil para variantes en inglés y otros idiomas, habiendo sido preferido a SONDEX en varios idiomas indoeuropeos . Por otro lado, la codificación fonética aproximada causa dependencia del idioma o, en una variante del idioma, dependencia promedio del hablante del idioma, principalmente para las variantes que no son del inglés.
Quizás el primer ejemplo de adaptación estable de metáfonos no ingleses fue el portugués brasileño : se originó en ~ 2008 como una solución de base de datos en el municipio de Várzea Paulista de Brasil, y evolucionó hasta el algoritmo actualmetaphone-ptbr
.
Ver también
Referencias
- ^ Colgando del metafono, Lawrence Philips. Computer Language, vol. 7, No. 12 (diciembre), 1990.
- ^ "Morfoedro - Tecnología" . www.morfoedro.it . Consultado el 16 de mayo de 2018 .
- ^ http://aspell.net/metaphone/dmetaph.cpp
- ^ https://github.com/OpenRefine/OpenRefine/blob/master/main/src/com/google/refine/clustering/binning/Metaphone3.java
- ^ https://dl.acm.org/citation.cfm?id=349132
- ^ Mejores caras hacia adelante: un estudio a gran escala de la búsqueda de personas en la empresa I Guy, S Ur, I Ronen, S Weber ... - 2012 - http://www.research.ibm.com/haifa/dept/imt /papers/guyCHI12.pdf
- ^ Atkinson, Kevin. "Algoritmo del metafonía de Lawrence Philips" . aspell.net . Consultado el 16 de mayo de 2018 .
- ^ "Software antropomórfico" . www.amorphics.com . Consultado el 16 de mayo de 2018 .
- ^ "Fuente OpenRefine para Metaphone3" . github.com . Consultado el 2 de noviembre de 2020 .
enlaces externos
- El algoritmo de búsqueda de doble metafono , por Lawrence Phillips, 1 de junio de 2000, artículo original del Dr. Dobb
Algoritmos de metafonos para otros idiomas
- Portugués brasileño en C Metaphone para portugués brasileño, en C con PHP y puerto PostgreSQL.
- Portugués brasileño en Java Metaphone para portugués brasileño, en Java.
- Metaphone español en Python
- Algoritmo de doble metafono para bengalí
- Algoritmo de doble metafono para amárico
- Metáfono ruso en rubí .
- Metaphone 3 para español y alemán
- Doble Metaphone y Metaphone en JavaScript