El 31/10/14 a las 12:54, Gustavo Rosso escibió: > > Buenos dias lista. > > Necesito escribir una función que pueda comparar dos string y sacar > como conclusión que porcentaje de parecido tienen. >
Se puede usar pg_trgm a través de índices GIN, te puede dar "la distancia" entre cada. La función es: postgres=# select similarity_dist('emanuel', 'manuel'); similarity_dist ----------------- 0.5 (1 row) postgres=# select similarity_dist('emanuel', 'emanuel'); similarity_dist ----------------- 0 (1 row) 0 = en el mismo lugar 1 = muy lejos Para usar en un índice: create index trgm_idx on test_trgm using gist (t gist_trgm_ops); Hay una serie de ejemplos dentro del contrib (pg_trgm.sql). El contrib de fuzzystrmatch te puede dar algunas funciones para buscar la similaridad de palabras (usando algoritmos de fonética): http://www.postgresql.org/docs/current/static/fuzzystrmatch.html > Por ej. Dos campos con apellido y nombre en uno y tal vez nombre y > apellido en otro, siendo la misma persona. > Sería algo así (recuerda que es en inglés): postgres=# select soundex('emanuel'), soundex('manuel'), difference('emanuel','manuel'); soundex | soundex | difference ---------+---------+------------ E554 | M540 | 1 (1 row) 0 = nada parecido 4 = lo mismo -- -- Emanuel Calvo http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda