viernes, 6 de septiembre de 2019

LISTAS RELACIONADAS CON LAS MATEMÁTICAS - ALGORITMOS


El enfoque de calificación de coincidencia (MRA) es un algoritmo fonético desarrollado por Western Airlines en 1977 para la indexación y comparación de nombres homófonos . [1]
El algoritmo en sí tiene un conjunto simple de reglas de codificación pero un conjunto más extenso de reglas de comparación. El mecanismo principal es la comparación de similitud, que calcula el número de caracteres no coincidentes comparando las cadenas de izquierda a derecha y luego de derecha a izquierda, y eliminando caracteres idénticos. Este valor se resta de 6 y luego se compara con un umbral mínimo. El umbral mínimo se define en la tabla A y depende de la longitud de las cadenas.
El nombre codificado se conoce (quizás incorrectamente) como un identificador numérico personal (PNI). El nombre codificado nunca puede contener más de 6 caracteres alfa solamente.
El enfoque de calificación de coincidencia funciona bien con los nombres que contienen la letra "y", a diferencia del sabor original del algoritmo NYSIIS ; por ejemplo, los apellidos "Smith" y "Smyth" coinciden con éxito. Sin embargo, MRA no funciona bien con nombres codificados que difieren en longitud en más de 2.

Reglas de codificación editar ]

  1. Eliminar todas las vocales a menos que la vocal comience la palabra
  2. Eliminar la segunda consonante de cualquier consonante doble presente
  3. Reduzca el códice a 6 letras uniendo las primeras 3 y las últimas 3 letras solamente

Reglas de comparación editar ]

En esta sección, las palabras "cadena (s)" y "nombre (s)" significan "cadena (s) codificada" y "nombre (s) codificado".
  1. Si la diferencia de longitud entre las cadenas codificadas es 3 o mayor, no se realiza una comparación de similitud.
  2. Obtenga el valor de calificación mínimo calculando la suma de la longitud de las cadenas codificadas y utilizando la tabla A
  3. Procese las cadenas codificadas de izquierda a derecha y elimine los caracteres idénticos encontrados en ambas cadenas respectivamente.
  4. Procese los caracteres no coincidentes de derecha a izquierda y elimine los caracteres idénticos encontrados en ambos nombres respectivamente.
  5. Resta el número de caracteres no coincidentes de 6 en la cadena más larga. Esta es la calificación de similitud.
  6. Si la calificación de similitud es igual o mayor que la calificación mínima, entonces la coincidencia se considera buena.

Umbral mínimo editar ]

La siguiente tabla muestra la asignación entre la calificación mínima y las longitudes de cadena.
Tabla A
Suma de longitudesCalificación mínima
≤ 45 5
4 4 4
7 3
= 122

Ejemplos enfoque de calificación partido editar ]

La siguiente tabla muestra la salida del algoritmo de enfoque de clasificación de coincidencia para algunos nombres homófonos comunes.
NombreCodex MRACalificación mínimaCalificación de comparación de similitud
ByrneBYRN4 45 5
BoernBRN
HerreroSMTH35 5
SmythSMYTH
CatherineCTHRN34 4
KathrynKTHRYN











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 la pronunciación en inglés para producir una codificación más precisa, lo que hace un mejor trabajo de emparejar palabras y nombres que suenan similares. Al igual que con Soundex, las palabras de sonido similar deberían compartir las mismas claves. Metaphone está disponible como operador integrado en varios sistemas.
El autor original más tarde produjo una nueva versión del algoritmo, al que llamó Double Metaphone . Contrariamente al algoritmo original cuya aplicación se limita al inglés solamente, esta versión tiene en cuenta las peculiaridades ortográficas de varios otros idiomas. En 2009, Lawrence Philips lanzó una tercera versión, llamada Metaphone 3, que logra una precisión de aproximadamente el 99% para las palabras en inglés, palabras que no están en inglés familiares para los estadounidenses, y los nombres y apellidos que se encuentran comúnmente en los Estados Unidos, que se han desarrollado de acuerdo con según los estándares de ingeniería modernos contra un mazo de pruebas de codificaciones correctas preparadas.

Procedimiento editar ]

Los códigos originales de Metaphone usan los 16 símbolos de consonantes 0BFHJKLMNPRSTWXY. El '0' representa " th " (como una aproximación ASCII de Θ ), 'X' representa " sh " o " ch ", y los otros representan sus pronunciaciones habituales en inglés. Las vocales AEIOU también se usan, pero solo al comienzo del código. [2] Esta tabla resume la mayoría de las reglas en la implementación original:
  1. Suelte letras adyacentes duplicadas, excepto C.
  2. Si la palabra comienza con 'KN', 'GN', 'PN', 'AE', 'WR', suelte la primera letra.
  3. Suelta 'B' si después de 'M' al final de la palabra.
  4. 'C' se transforma en 'X' si es seguido por '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 es seguido por 'I', 'E' o 'Y'. De lo contrario, 'C' se transforma en 'K'.
  5. 'D' se transforma en 'J' si es seguido por 'GE', 'GY' o 'GI'. De lo contrario, 'D' se transforma en 'T'.
  6. Suelta 'G' si es seguido por 'H' y 'H' no está al final o antes de una vocal. Suelta 'G' si seguido de 'N' o 'NED' y está al final.
  7. 'G' se transforma en 'J' si antes de 'I', 'E' o 'Y', y no está en 'GG'. De lo contrario, 'G' se transforma en 'K'.
  8. Suelte 'H' si después de la vocal y no antes de una vocal.
  9. 'CK' se transforma en 'K'.
  10. 'PH' se transforma en 'F'.
  11. 'Q' se transforma en 'K'.
  12. 'S' se transforma en 'X' si es seguido por 'H', 'IO' o 'IA'.
  13. 'T' se transforma en 'X' si es seguido por 'IA' o 'IO'. 'TH' se transforma en '0'. Suelta 'T' si seguido de 'CH'.
  14. 'V' se transforma en 'F'.
  15. 'WH' se transforma en 'W' si al principio. Suelta 'W' si no es seguido de una vocal.
  16. 'X' se transforma en 'S' si al principio. De lo contrario, 'X' se transforma en 'KS'.
  17. Suelta 'Y' si no es seguido de una vocal.
  18. 'Z' se transforma en 'S'.
  19. Suelta todas las vocales a menos que sea el comienzo.
Esta tabla no constituye una descripción completa del algoritmo original de Metaphone, y el algoritmo no puede codificarse correctamente a partir de él. Metaphone original 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 que se producirán en las dos primeras versiones.
Para implementar Metaphone sin comprar una copia (código fuente) de Metaphone 3, se puede usar la implementación de referencia de Double Metaphone. [3]

Doble metaphone editar ]

El algoritmo de codificación fonética 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 . 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 uno 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 explicar innumerables irregularidades en inglés de origen eslavo , germánico , celta , griego , francés , italiano , español , chino y otros. Por lo tanto, utiliza un conjunto de reglas mucho más complejo para la codificación que su predecesor; por ejemplo, prueba aproximadamente 100 contextos diferentes del uso de la letra C solo.

Metaphone 3 editar ]

Una versión profesional fue lanzada en octubre de 2009, 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 familiares para los estadounidenses y los nombres y apellidos que se encuentran comúnmente en los Estados Unidos. Mejora la codificación de nombres propios en particular en gran medida. [4]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 del Metaphone 1) teniendo en cuenta las vocales no iniciales, así como 2) codificando las consonantes sonoras y sordas de manera diferente. Esto permite que el conjunto de resultados esté más enfocado si el desarrollador encuentra que los resultados de búsqueda incluyen demasiadas palabras que no se parecen lo suficiente al término de búsqueda. [5] Metaphone 3 se vende como fuente C ++, Java, C #, PHP, Perl y PL / SQL, envoltorios Ruby y Python que acceden a un jar Java, y también Metaphone 3 para pronunciación en español y alemán disponible como fuente Java y C #. [6] La última revisión del algoritmo Metaphone 3 es v2.5.4, lanzada en marzo de 2015.

Conceptos erróneos comunes editar ]

Hay algunos conceptos erróneos sobre los algoritmos de Metaphone que deben abordarse. Las siguientes afirmaciones son verdaderas:
  1. Todos ellos están diseñados para abordar palabras regulares de "diccionario", no solo nombres, y
  2. 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 el primer carácter de la codificación (en Double Metaphone y Metaphone 3 - Metaphone original solo conserva la vocal real),
  • las vocales después de un sonido 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 errores ortográficos o, de lo contrario, varían las palabras y los nombres que intentan deletrear. Las vocales, por supuesto, son notoriamente muy variables. Los hablantes británicos a menudo se quejan de que los estadounidenses parecen pronunciar 'T' es lo mismo 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 vocales después de un sonido vocal inicial ayudará a agrupar palabras donde una vocal y una consonante pueden transponerse en la ortografía o pronunciación alternativa.









Sistema de Identificación e Inteligencia del Estado de Nueva York , comúnmente conocido como NYSIIS, es un algoritmo fonético ideado en 1970 como parte del Sistema de Identificación e Inteligencia del Estado de Nueva York (ahora parte de la División de Servicios de Justicia Criminal del Estado de Nueva York). Presenta un aumento de precisión del 2.7% sobre el algoritmo tradicional Soundex . [1]

Procedimiento editar ]

El algoritmo, como se describe en Técnicas de búsqueda de nombres , [2] es:
  1. Si las primeras letras del nombre son
    'MAC' luego cambia estas letras a 'MCC'
    'KN' luego cambia estas letras a 'NN'
    'K' luego cambie esta letra a 'C'
    'PH' luego cambia estas letras a 'FF'
    'PF' luego cambia estas letras a 'FF'
    'SCH' luego cambia estas letras a 'SSS'
  2. Si las últimas letras del nombre son [3]
    'EE' luego cambia estas letras a 'Y␢'
    'IE' luego cambia estas letras a 'Y␢'
    'DT' o 'RT' o 'RD' o 'NT' o 'ND' luego cambie estas letras a 'D␢'
  3. El primer carácter del código NYSIIS es el primer carácter del nombre.
  4. En las siguientes reglas, se realiza un escaneo de los caracteres del nombre. Esto se describe en términos de un ciclo de programa. Se utiliza un puntero para apuntar a la posición actual bajo consideración en el nombre. El paso 4 es configurar este puntero para que apunte al segundo carácter del nombre.
  5. Teniendo en cuenta la posición del puntero, solo se puede ejecutar una de las siguientes declaraciones.
    1. Si está en blanco, vaya a la regla 7.
    2. Si la posición actual es una vocal (AEIOU), entonces si es igual a 'EV', cambie a 'AF'; de lo contrario, cambie la posición actual a 'A'.
    3. Si la posición actual es la letra
      'Q' luego cambie la letra a 'G'
      'Z' luego cambia la letra a 'S'
      'M' luego cambie la letra a 'N'
    4. Si la posición actual es la letra 'K', entonces si la siguiente letra es 'N', reemplace la posición actual por 'N'; de lo contrario, reemplace la posición actual por 'C'
    5. Si la posición actual apunta a la cadena de letras
      'SCH' luego reemplaza la cadena con 'SSS'
      'PH' luego reemplace la cadena con 'FF'
    6. Si la posición actual es la letra 'H' y la letra anterior o siguiente no es una vocal (AEIOU), reemplace la posición actual con la letra anterior.
    7. Si la posición actual es la letra 'W' y la letra anterior es una vocal, reemplace la posición actual con la posición anterior.
    8. Si no se aplica ninguna de estas reglas, conserve el valor actual de la letra de posición.
  6. Si la letra de posición actual es igual a la última letra colocada en el código, configure el puntero para que apunte a la siguiente letra y vaya al paso 5.
    El siguiente carácter del código NYSIIS es la letra de posición actual.
    Incremente el puntero para apuntar a la siguiente letra.
    Ve al paso 5.
  7. Si el último carácter del código NYSIIS es la letra 'S', elimínelo.
  8. Si los dos últimos caracteres del código NYSIIS son las letras 'AY', reemplácelas con el carácter único 'Y'.
  9. Si el último carácter del código NYSIIS es la letra 'A', elimine esta letra.














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] y Oracle . [6] ) Las mejoras en Soundex son la base de muchos algoritmos fonéticos modernos.

Historia editar ]

Soundex fue desarrollado por Robert C. Russell y Margaret King [8] Odell y patentado en 1918 [9] y 1922. [10] 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 llegó a la fama en la década de 1960 cuando fue objeto de varios artículos en la revista Communications and Journal of the Association for Computing Machinery , y especialmente cuando se describe en The Art of Computer Programming de Donald Knuth [11]
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 Estados Unidos. [1] Estas reglas de codificación están disponibles en NARA, previa solicitud, en forma del Folleto de información general 55, "Uso del índice de referencia del censo".

American Soundex editar ]

El código Soundex para un nombre consiste en 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. Conserve la primera letra del nombre y suelte todas las demás ocurrencias de a, e, i, o, u, y, h, w.
  2. Reemplace las 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
  3. Si dos o más letras con el mismo número son adyacentes en el nombre original (antes del paso 1), solo conserve la primera letra; también dos letras con el mismo número separadas por 'h' o 'w' se codifican como un solo número, mientras que esas letras separadas por una vocal se codifican dos veces. Esta regla también se aplica a la primera letra.
  4. Si tiene muy pocas letras en su palabra que no puede asignar tres números, agregue con ceros hasta que haya tres números. Si tiene más de 3 letras, simplemente conserve los primeros 3 números.
Usando 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 se codifican 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 están codificadas una vez como 'P'), y "Honeyman" produce "H555".
El siguiente algoritmo es seguido por la mayoría de los lenguajes SQL (excluyendo PostgreSQL [se necesita un ejemplo ] ):
  1. Guarda la primera letra. Mapear todas las ocurrencias de a, e, i, o, u, y, h, w. a cero (0)
  2. Reemplace todas las consonantes (incluya la primera letra) con dígitos como en [2.] arriba.
  3. Reemplace todos los mismos dígitos adyacentes con un dígito y luego elimine todos los dígitos cero (0)
  4. Si el dígito de la letra guardada es el mismo que el primer dígito resultante, elimine el dígito (conserve la letra).
  5. Agregue 3 ceros si el resultado contiene menos de 3 dígitos. Elimine todos excepto la primera letra y 3 dígitos después (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 cuando se eliminan las vocales. El primer algoritmo es usado por la mayoría de los lenguajes de programación y el segundo es usado por 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 realiza 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. [12] [13]

Variantes editar ]

Un algoritmo similar llamado "Reverse Soundex" prefija 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 caracteres múltiples y mantiene una 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 luego mejorado por el genealogista Randy Daitch debido a problemas que encontraron al intentar aplicar el Russell Soundex a judíos con apellidos germanos o eslavos (como Moskowitz vs. Moskovitz o Levine vs. Lewin). D-M Soundex se conoce a veces como "Soundex judío" o "Soundex de Europa del Este", [14] aunque los autores desalientan 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 en el algoritmo Soundex, Lawrence Philips desarrolló el algoritmo Metaphone en 1990. Philips desarrolló una mejora a Metaphone en 2000, que llamó Doble 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 una secundaria para tener en cuenta las diferentes pronunciaciones de una sola palabra en inglés. Philips creó Metaphone 3como 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 que no están en inglés familiares para los estadounidenses y nombres y apellidos que se encuentran en los Estados Unidos. También proporciona configuraciones que permiten una coincidencia de consonantes y vocales internas más exactas para permitir que el programador enfoque la precisión de las coincidencias más de cerca.

No hay comentarios:

Publicar un comentario