Sonidoex

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
algoritmo fonético para los nombres de indexación por sonido

Soundex es un algoritmo fonético para indexar nombres por sonido, como se pronuncia en inglés. El objetivo es que los homófonos sean codificados a la misma representación para que puedan ser igualados a pesar de las diferencias menores en la ortografía. El algoritmo codifica principalmente consonantes; una vocal no será codificada 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 bases de datos populares como IBM Db2, PostgreSQL, MySQL, SQLite, Ingres, MS SQL Server, Oracle, ClickHouse, Snowflake y SAP ASE.) Las mejoras a Soundex son la base de muchos algoritmos fonéticos modernos.

Historia

Soundex fue desarrollado por Robert C. Russell y Margaret King Odell y patentado en 1918 y 1922. En la década de 1930 se utilizó una variación, American Soundex, para un análisis retrospectivo de los censos de EE. UU. desde 1890 hasta 1920. El código Soundex surgió saltó a la fama en la década de 1960, cuando fue objeto de varios artículos en Communications y en el Journal of the Association for Computing Machinery, y especialmente cuando se describió en el artículo de Donald Knuth. El arte de la programación informática.

La Administración Nacional de Archivos y Registros (NARA) mantiene la regla actual establecida para la implementación oficial de Soundex utilizada por el gobierno de los EE. UU. Estas reglas de codificación están disponibles en NARA, previa solicitud, en el formato del Folleto de información general 55, "Uso del Censo Soundex".

American Soundex

El código Soundex para 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 de articulación similar 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:

  1. Retener la primera letra del nombre y dejar caer todas las otras ocurrencias de a, e, i, o, u, y, h, w.
  2. Sustitúyase los consonantes con dígitos como sigue (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
  3. Si dos o más cartas con el mismo número están adyacentes en el nombre original (antes del paso 1), sólo conservan la primera letra; también dos letras con el mismo número separados por 'h', 'w' o 'y' se codifican como un solo número, mientras que las letras separadas por una vocal se codifican dos veces. Esta regla también se aplica a la primera carta.
  4. Si hay demasiadas letras en la palabra para asignar tres números, anexa ceros hasta que haya tres números. Si hay cuatro o más números, retenga sólo los tres primeros.

Utilizando este algoritmo, tanto "Robert" y "Rupert" devolver la misma cadena "R163" mientras "Rubin" rinde "R150". "Ashcraft" y "Ashcroft" ambos producen "A261". "Tymczak" produce "T522" no "T520" (los caracteres 'z' y 'k' en el nombre se codifican como 2 dos veces ya que hay una vocal entre ellos). "Pfister" produce "P236" no "P123" (las dos primeras letras tienen el mismo número y están codificadas una vez como 'P') y "Honeyman" produce "H555".

La mayoría de los lenguajes SQL (excepto PostgreSQL) siguen el siguiente algoritmo:

  1. Guarda la primera carta. Mapa todas las ocurrencias de a, e, i, o, u, y, h, w. a cero(0)
  2. Reemplazar todos los consonantes (incluye la primera letra) con dígitos como en [2.] arriba.
  3. Reemplazar todos los mismos dígitos adyacentes con un dígito, y luego eliminar todos los dígitos cero (0)
  4. Si el dígito de la carta guardada es el mismo que el primer dígito resultante, retire el dígito (guarde la letra).
  5. Apéndice 3 ceros si el resultado contiene menos de 3 dígitos. Quitar todo excepto la primera letra y 3 dígitos después de ella (Este paso es el mismo que [4.] en explicación arriba).

Los dos algoritmos anteriores no devuelven los mismos resultados en todos los casos, principalmente debido a la diferencia entre el momento en que se eliminan las vocales. El primer algoritmo lo utilizan la mayoría de los lenguajes de programación y el segundo lo utiliza 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. Como ejemplos, tanto "Robert" y "Rupert" rendimiento "R163" y "Hombre de miel" produce "H555". Al diseñar una aplicación que combina 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.

Variantes

Un algoritmo similar llamado "Reverse Soundex" antepone la última letra del nombre en lugar de la primera.

El algoritmo del Sistema de Inteligencia e 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.

Daitch–Mokotoff Soundex (D–M Soundex) 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 Russell Soundex a judíos con apellidos germánicos o eslavos (como Moskowitz contra Moskovitz o Levine contra Lewin). A D–M Soundex a veces se le conoce como "Soundex judío" o "Soundex de Europa del Este", 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 D-M 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 en el algoritmo Soundex, Lawrence Philips desarrolló el algoritmo Metaphone en 1990. Philips desarrolló una mejora de Metaphone en 2000, a la 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 dar cuenta de diferentes pronunciaciones de una sola palabra en inglés. Philips creó Metaphone 3 como una revisión adicional en 2009 para proporcionar una versión profesional que proporcione un porcentaje mucho mayor de codificaciones correctas para palabras en inglés, palabras no inglesas familiares para los estadounidenses y nombres y apellidos encontrados en los Estados Unidos. También proporciona configuraciones que permiten una coincidencia más exacta de consonantes y vocales internas para permitir al programador centrarse más en la precisión de las coincidencias.

Contenido relacionado

Lógica de primer orden

Lógica de primer orden: también conocida como lógica de predicados, lógica cuantificacional y cálculo de predicados de primer orden—es una colección...

Red semántica

Una red semántica, o red de marcos, es una base de conocimiento que representa relaciones semánticas entre conceptos en una red. Esto se utiliza a menudo...

Gramática libre de contexto

En la teoría del lenguaje formal, una gramática independiente del contexto es una gramática formal cuyas reglas de producción son de la...

ISO/CEI 8859-1

ISO/IEC 8859-1:1998, Tecnología de la información: juegos de caracteres gráficos codificados de un solo byte de 8 bits. Parte 1: Alfabeto latino n.° 1, es...

Lenguaje formal

En lógica, matemáticas, informática y lingüística, un lenguaje formal consta de palabras cuyas letras se toman de un alfabeto y están bien formadas de...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save