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

Responder a