jueves, 21 de junio de 2007

Algoritmo Soundex

Bueno esto es algo q me traia hace un par de dias, se trat sobre el algoritmo Soundex, es un algoritmo fonético, fue basicamente diseñado para indexar palabar por su sonido al ser pronunciadas en inglés, pero tb se usa en español, el objetivo de este algoritmo es codificar de la misma manera dos palabras que tenga semejanza en su pronunciacion; como que hacer cuando uno se pone a buscar a alguien que pensamos que se llama Juan, y despues de perder tiempo resulta que se llamaba Jean.

Este es el algoritmo fonético mas comun, aunque hay muchos otros, algunos mucho mas complejos; Soundex fue desarrollado por Robert Rusell y Margaret Odell y patentado en 1918 y 1922, bueno hasta ahi nada mas con historia, pues no es el fin de este articulo.

El codigo soundex consiste en una letra seguida de tres números:
La letra es la primera letra de la palabra a codificar, y los números condifican al resto de las consonantes, las vocales se desprecian a menos que con esta empiece la palabra, en ese caso sera la primera letra en el codigo. Las consonantes con sonido parecido se codifican por un mismo número, por ejemplo la B, F, P y V son codificadas con el 1.
La H, W e Y se desprecian.
Si 2 o mas consonantes consecutivas equivalen al mismo grupo de conversión, la segunda y restantes se desprecian.
En caso la primera letra se una consonante y la segunda letra sea una consonantes del mismo grupo no se desprecia esta.
Para completar se usa el 0, como en el ejemplo de Miluska.

La tabla para la conversión es la siguiente :
1 : B, F, P, V
2 : C, G, J, K, Q, S, X, Z
3 : D, T
4 : L
5 : M, N, (Ñ)
6 : R

Unos ejemplos, para saber si entendimos:
Victor: V236
Miluska: M420
Cristo: C623
Motocicleta: M322
Paralelepipedo:P644
Mozart: M263
Ansiolitico: A524
Taquicardia: T226
Enseñar: E525 (E526)*

*en caso se usen SQL, el cual desprecia la Ñ.

Como ya habran deducido SQL trae incluido la funcion Soundex, ahi pondran verificar las conversiones que hagan. EL codigo para este fin es:

Select Soundex('expression1'), Soundex('expression2')


Tambien les muestro una de las maneras que se ocurre poder usarla, que de seguro a ustedes se le habra de ocurrir muchas mas.

use northwind
select contactname,address,city,phone
from Customers
where soundex(contactname)=soundex('marie')


Es una pequeña consulta a la tabla Customers de la base de datos Northwind, en la que deseo saber conocer los nombres de las personas a contactar que suenen como Marie, y me devuelve 5 campos:



Bueno espero les sirva este documento y saber que no ha habido esfuerzo en vano, ya saben cualquier cosa estan los comentarios y les respondere. Hasta otro momento. Bendiciones

No hay comentarios: