Soundex es un algoritmo fonético para indexar nombres por sonido, como se pronuncia en inglés. El objetivo es que los homófonos se codifiquen en la misma representación para que puedan coincidir a pesar de las 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 más conocido de todos los algoritmos fonéticos (en parte porque es una característica estándar de software de base de datos popular como DB2 , PostgreSQL , [2] MySQL , [3] SQLite, [4] Ingres , MS SQL Server , [5] Oracle . [6] y SAP ASE . [7] ) Las mejoras en Soundex son la base de muchos algoritmos fonéticos modernos. [8]
Historia
Soundex fue desarrollado por Robert C. Russell y Margaret King Odell [9] y patentado en 1918 [10] y 1922. [11] Una variación, American Soundex, se utilizó en la década de 1930 para un análisis retrospectivo de los censos estadounidenses desde 1890 hasta 1920. El código Soundex saltó a la fama en la década de 1960 cuando fue tema de varios artículos en Communications and Journal of the Association for Computing Machinery , y especialmente cuando se describe en The Art of Computer Programming de Donald Knuth . [12]
La Administración Nacional de Archivos y Registros (NARA) mantiene el conjunto de reglas actual para la implementación oficial de Soundex utilizada por el gobierno de los EE. UU. [1] Estas reglas de codificación están disponibles en NARA, previa solicitud, en forma de Folleto de información general 55, "Uso del Census Soundex".
American Soundex
El código Soundex de un nombre consta de una letra seguida de tres dígitos numéricos : la letra es la primera letra del nombre y los dígitos codifican las consonantes restantes . Las consonantes en un lugar similar de articulación comparten el mismo dígito, por lo que, por ejemplo, las consonantes labiales B, F, P y V están codificadas como el número 1.
El valor correcto se puede encontrar de la siguiente manera:
- Conserve la primera letra del nombre y elimine todas las demás apariciones de a, e, i, o, u, y, h, w.
- Reemplace consonantes con 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 están adyacentes en el nombre original (antes del paso 1), solo conserve la primera letra; también dos letras con el mismo número separado por 'h' o 'w' se codifican como un solo número, mientras que tales letras separadas por una vocal se codifican dos veces. Esta regla también se aplica a la primera letra.
- Si tiene muy pocas letras en su palabra y no puede asignar tres números, agregue ceros hasta que haya tres números. Si tiene cuatro o más números, conserve solo los tres primeros.
Con este algoritmo, tanto "Robert" como "Rupert" devuelven la misma cadena "R163" mientras que "Rubin" produce "R150". "Ashcraft" y "Ashcroft" producen "A261". "Tymczak" produce "T522" no "T520" (los caracteres 'z' y 'k' en el nombre están codificados como 2 dos veces ya que una vocal se encuentra entre ellos). "Pfister" produce "P236", 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 siguen el siguiente algoritmo (excepto PostgreSQL [se necesita un ejemplo ] ):
- Guarde la primera letra. Mapee todas las apariciones de a, e, i, o, u, y, h, w. a cero (0)
- Reemplace todas las consonantes (incluya la primera letra) con dígitos como en [2.] arriba.
- Reemplace todos los mismos dígitos adyacentes con un dígito y luego elimine 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 posteriores (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 entre cuándo se eliminan las vocales. El primer algoritmo lo utilizan la mayoría de los lenguajes de programación y el segundo lo utiliza SQL. Como ejemplos, tanto "Robert" como "Rupert" producen "R163", mientras que "Tymczak" produce "T520" y "Honeyman" produce "H555". Al diseñar una aplicación, que combina SQL y un lenguaje de programación, el arquitecto debe decidir si hace toda la codificación Soundex en el servidor SQL o todo en el lenguaje de programación. La implementación de MySQL puede devolver más de 4 caracteres. [13] [14]
Variantes
Un algoritmo similar llamado "Reverse Soundex" antepone la última letra del nombre en lugar de la primera.
El algoritmo del Sistema de Inteligencia y Identificación 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 la posición relativa de las vocales, mientras que Soundex no lo hace.
Daitch-Mokotoff Soundex (D-M Soundex) fue desarrollado en 1985 por el genealogista Gary Mokotoff y luego mejorado por el genealogista Randy Daitch debido a los problemas que encontraron al tratar de aplicar el Russell Soundex a judíos con apellidos germánicos o eslavos (como Moskowitz vs. Moskovitz o Levine contra Lewin). D – M Soundex a veces se denomina "Soundex judío" o "Soundex de Europa del Este", [15] aunque los autores desaconsejan el uso de esos nombres. El algoritmo D – M Soundex puede devolver hasta 32 codificaciones fonéticas individuales para un solo nombre. Los resultados de DM Soundex se devuelven en un formato totalmente numérico entre 100000 y 999999. Este algoritmo es mucho más complejo que Russell Soundex.
Como respuesta a las deficiencias del algoritmo Soundex, Lawrence Philips desarrolló el algoritmo Metaphone en 1990. Philips desarrolló una mejora de Metaphone en 2000, al que llamó Double Metaphone. Double Metaphone incluye un conjunto de reglas de codificación mucho más grande que su predecesor, maneja un subconjunto de caracteres no latinos y devuelve una codificación primaria y secundaria para tener en cuenta las diferentes pronunciaciones de una sola palabra en inglés. Philips creó Metaphone 3 como una nueva revisión en 2009 para proporcionar una versión profesional que proporciona un porcentaje mucho mayor de codificaciones correctas para palabras en inglés, palabras que no son del inglés conocidas por los estadounidenses y nombres y apellidos que se encuentran en los Estados Unidos. También proporciona configuraciones que permiten una correspondencia más exacta de consonantes y vocales internas para permitir al programador enfocar la precisión de las coincidencias más de cerca.
Ver también
- Enfoque de clasificación de partidos
- Distancia de Levenshtein
Referencias
- ^ a b "El sistema de indexación de Soundex" . Administración Nacional de Archivos y Registros . 2007-05-30 . Consultado el 24 de diciembre de 2010 .
- ^ "PostgreSQL: Documentación: 9.1: fuzzystrmatch" . postgresql.com . Consultado el 3 de noviembre de 2012 .
- ^ "MySQL :: MySQL 5.5 Reference Manual :: 12.5 String Functions - SOUNDEX" . dev.mysql.com .
- ^ "SQL entendido por SQLite - Funciones principales" . sqlite.org . Consultado el 27 de enero de 2017 .
- ^ "SOUNDEX (Transact-SQL)" . msdn.microsoft.com . Consultado el 3 de noviembre de 2012 .
- ^ "SOUNDEX" . docs.oracle.com . Consultado el 20 de octubre de 2017 .
- ^ "soundex" . SyBooks en línea . Consultado el 24 de mayo de 2021 .
- ^ "Coincidencia fonética: un mejor Soundex" . Consultado el 3 de noviembre de 2012 .
- ^ Odell, Margaret King (1956). "El beneficio en la gestión de registros" . Sistemas . Nueva York. 20:20 .
- ^ Patente estadounidense 1261167 , RC Russell, "(sin título)", emitida el 2 de abril de 1918( Archivado )
- ^ Patente estadounidense 1435663 , RC Russell, "(sin título)", emitida el 14 de noviembre de 1922( Archivado )
- ^ Knuth, Donald E. (1973). El arte de la programación informática: volumen 3, clasificación y búsqueda . Addison-Wesley. págs. 391–92. ISBN 978-0-201-03803-3. OCLC 39472999 .
- ^ CodingForums.com ( [1] )
- ^ "MySQL :: MySQL 5.5 Reference Manual :: 12.5 String Functions - SOUNDEX" . dev.mysql.com .
- ^ Mokotoff, Gary (8 de septiembre de 2007). "Soundexing y genealogía" . Consultado el 27 de enero de 2008 .