Soundex es un algoritmo fonético para indexar nombres por sonido, tal como se pronuncian en inglés. El objetivo es que los homófonos se codifiquen con la misma representación para que puedan coincidir a pesar de pequeñas diferencias en la ortografía . [ 1 ] El algoritmo codifica principalmente consonantes; una vocal no se codificará a menos que sea la primera letra. Soundex es el algoritmo fonético más conocido (en parte porque es una característica estándar de software de bases de datos populares como IBM Db2 , PostgreSQL , [ 2 ] MySQL , [ 3 ] SQLite , [ 4 ] Ingres , MS SQL Server , [ 5 ] Oracle , [ 6 ] ClickHouse , [ 7 ] Snowflake [ 8 ] y SAP ASE . [ 9 ] ) Las mejoras a Soundex son la base de muchos algoritmos fonéticos modernos. [ 10 ]
Historia
Soundex fue desarrollado por Robert C. Russell y Margaret King Odell [ 11 ] y patentado en 1918 [ 12 ] y 1922. [ 13 ]
La marca registrada SOUNDEX (número de serie USPTO 71246709) fue presentada el 31 de marzo de 1927 por Rand Kardex Bureau, Inc., y abarca fichas y formularios para sistemas de indexación fonética. [ 14 ]
Una variante, denominada American Soundex, se utilizó en la década de 1930 para un análisis retrospectivo de los censos estadounidenses de 1890 a 1920. El código Soundex cobró relevancia en la década de 1960, cuando fue objeto de varios artículos en el Communications and Journal of the Association for Computing Machinery , y especialmente cuando se describió en The Art of Computer Programming de Donald Knuth . [ 15 ]
La Administración Nacional de Archivos y Registros (NARA) mantiene el conjunto de reglas vigente para la implementación oficial de Soundex utilizada por el gobierno de los Estados Unidos. [ 1 ] Estas reglas de codificación están disponibles en NARA, previa solicitud, en el folleto informativo general número 55, "Uso de Soundex del censo".
Sonido americano
El código Soundex para un nombre consta de una letra seguida de tres dígitos numéricos : la letra es la inicial del nombre y los dígitos codifican las consonantes restantes . Las consonantes con un punto de articulación similar comparten el mismo dígito; por ejemplo, las consonantes labiales B, F, P y V se codifican cada una con el número 1.
El valor correcto se puede encontrar de la siguiente manera:
- Conserva la primera letra del nombre y elimina todas las demás apariciones de a, e, i, o, u, y, h, w.
- Sustituya las consonantes por dígitos de la siguiente manera (después de la primera letra):
- b, f, p, v → 1
- c, g, j, k, q, s, x, z → 2
- d, t → 3
- l → 4
- m, n → 5
- r → 6
- Si dos o más letras con el mismo número aparecen juntas en el nombre original (antes del paso 1), solo se conserva la primera letra. Asimismo, dos letras con el mismo número separadas por 'h', 'w' o 'y' se codifican como un solo número, mientras que las separadas por una vocal se codifican dos veces. Esta regla también se aplica a la primera letra.
- Si la palabra tiene muy pocas letras para asignar tres números, agregue ceros hasta completar tres. Si tiene cuatro o más números, conserve solo los tres primeros.
Utilizando este algoritmo, tanto "Robert" como "Rupert" devuelven la misma cadena "R163", mientras que "Rubin" produce "R150". "Ashcraft" y "Ashcroft" producen "A261". "Tymczak" produce "T522" y no "T520" (los caracteres "z" y "k" del nombre se codifican como 2 dos veces, ya que hay una vocal entre ellos). "Pfister" produce "P236" y no "P123" (las dos primeras letras tienen el mismo número y se codifican una vez como "P"), y "Honeyman" produce "H555".
La mayoría de los lenguajes SQL (excepto PostgreSQL ) siguen el siguiente algoritmo :
- Guarda la primera letra. Asigna a cero (0) todas las ocurrencias de a, e, i, o, u, y, h, w.
- Reemplace todas las consonantes (incluida la primera letra) con dígitos como en [2.] arriba.
- Reemplaza todos los dígitos iguales adyacentes con un dígito y luego elimina todos los dígitos cero (0).
- Si el dígito de la letra guardada es el mismo que el primer dígito resultante, elimine el dígito (conserve la letra).
- Agregue 3 ceros si el resultado contiene menos de 3 dígitos. Elimine todo excepto la primera letra y los 3 dígitos que le siguen (este paso es el mismo que [4.] en la explicación anterior).
Los dos algoritmos anteriores no devuelven los mismos resultados en todos los casos, principalmente debido a la diferencia en el momento en que se eliminan las vocales. El primer algoritmo es utilizado por la mayoría de los lenguajes de programación y el segundo por SQL. Por ejemplo, "Tymczak" produce "T522" en el primer algoritmo, pero "T520" en el algoritmo utilizado por SQL. A menudo, ambos algoritmos generan el mismo código. Por ejemplo, tanto "Robert" como "Rupert" producen "R163" y "Honeyman" produce "H555". Al diseñar una aplicación que combine SQL y un lenguaje de programación, el arquitecto debe decidir si realizar toda la codificación Soundex en el servidor SQL o toda en el lenguaje de programación. La implementación de MySQL puede devolver más de 4 caracteres. [ 16 ] [ 17 ]
Variantes
Un algoritmo similar, llamado "Reverse Soundex", antepone la última letra del nombre en lugar de la primera.
El algoritmo del Sistema de Identificación e Inteligencia del Estado de Nueva York (NYSIIS) se introdujo en 1970 como una mejora del algoritmo Soundex. NYSIIS maneja algunos n-gramas de varios caracteres y mantiene el posicionamiento relativo de las vocales, mientras que Soundex no lo hace.
El Soundex Daitch-Mokotoff (Soundex D-M) fue desarrollado en 1985 por el genealogista Gary Mokotoff y posteriormente mejorado por el genealogista Randy Daitch debido a los problemas que encontraron al intentar aplicar el Soundex Russell a judíos con apellidos germánicos o eslavos (como Moskowitz frente a Moskovitz o Levine frente a Lewin). El Soundex D-M a veces se denomina "Soundex judío" o "Soundex de Europa del Este" [ 18 ] , aunque los autores desaconsejan el uso de esos nombres. El algoritmo Soundex D-M puede devolver hasta 32 codificaciones fonéticas individuales para un solo nombre. Los resultados del Soundex D-M se devuelven en un formato totalmente numérico entre 100000 y 999999. Este algoritmo es mucho más complejo que el Soundex Russell.
En respuesta a las deficiencias del algoritmo Soundex, Lawrence Philips desarrolló el algoritmo Metaphone en 1990. En el año 2000, Philips mejoró Metaphone con Double Metaphone, una versión que incluye un conjunto de reglas de codificación mucho más amplio que su predecesor, admite un subconjunto de caracteres no latinos y devuelve una codificación primaria y otra secundaria para tener en cuenta las diferentes pronunciaciones de una misma palabra en inglés. En 2009, Philips creó Metaphone 3, una revisión posterior que ofrece una versión profesional con un porcentaje mucho mayor de codificaciones correctas para palabras en inglés, palabras no inglesas comunes en Estados Unidos y nombres y apellidos estadounidenses. Además, incluye ajustes que permiten una correspondencia más precisa de consonantes y vocales internas, lo que facilita al programador un ajuste más preciso de la exactitud de las coincidencias.
Véase también
Referencias
- 1 2 "El sistema de indexación Soundex" . Archivos Nacionales . Administración Nacional de Archivos y Registros . 30 de mayo de 2007. Archivado del original el 12 de marzo de 2020. Recuperado el 24 de diciembre de 2010 .
- ↑ "Documentación: 9.1: fuzzystrmatch" . PostgreSQL . Archivado del original el 23 de julio de 2020. Consultado el 3 de noviembre de 2012 .
- ↑ "Manual de referencia de MySQL 5.5 :: 12.5 Funciones de cadena" . MySQL . SOUNDEX(str). Archivado del original el 15 de septiembre de 2016.
- ↑ "Funciones SQL de escalado integradas" . SQLite . 16 de julio de 2022. soundex(X). Archivado del original el 20 de diciembre de 2022. Consultado el 24 de diciembre de 2022 .
- ↑ "SOUNDEX (Transact-SQL)" . Microsoft Learn . 10 de enero de 2010. Archivado del original el 23 de octubre de 2022. Consultado el 3 de noviembre de 2012 .
- ↑ "SOUNDEX" . Referencia SQL de la base de datos . Archivado del original el 21 de octubre de 2017. Consultado el 20 de octubre de 2017 .
- ↑ "SOUNDEX" . Funciones para trabajar con cadenas de caracteres .
- ↑ "SOUNDEX — Documentación de Snowflake" . docs.snowflake.com . Consultado el 16 de enero de 2023 .
- ↑ "soundex" . SAP Software Solutions . 28 de mayo de 2014. Archivado del original el 25 de diciembre de 2022. Consultado el 24 de mayo de 2021 .
- ↑ "Coincidencia fonética: un Soundex mejorado" . Consultado el 3 de noviembre de 2012 .
- ↑ Odell, Margaret King (1956). "El beneficio en la gestión de registros" . Sistemas . 20. Nueva York: 20.
- ↑ Patente estadounidense 1261167 , RC Russell, "(sin título)", emitida el 2 de abril de 1918 ( Archivada )
- ↑ Patente estadounidense 1435663 , RC Russell, "(sin título)", emitida el 14 de noviembre de 1922 ( Archivada )
- ↑ "Marca registrada número 71246709 — SOUNDEX" . Estado de la marca registrada y recuperación de documentos de la USPTO . Consultado el 6 de junio de 2026 .
- ↑ Knuth, Donald E. (1973). El arte de la programación informática: Volumen 3, Ordenación y búsqueda . Addison-Wesley. págs. 391–392 . ISBN 978-0-201-03803-3. OCLC 39472999 . Archivado del original el 4 de septiembre de 2008 . Consultado el 17 de septiembre de 2010 .
- ↑ CodingForums.com ()
- ↑ "MySQL :: Manual de referencia de MySQL 5.5 :: Funciones de cadena 12.5 - SOUNDEX" . dev.mysql.com .
- ↑ Mokotoff, Gary (2007-09-08). "Soundexing y genealogía" . Recuperado el 27 de enero de 2008 .
- Algoritmos fonéticos