2012-01-19 10 views
8

Ho due tabelle che ho bisogno di unire insieme in PostgreSQL, sulla variabile comune "nome della società". Sfortunatamente molti nomi di società non corrispondono esattamente (MICROSOFT in una tabella, MICROSFT nell'altra). Ho provato a rimuovere le parole comuni da entrambe le colonne come "corporation" o "inc" o "ltd" per cercare di standardizzare i nomi su entrambe le tabelle, ma ho difficoltà a pensare a strategie aggiuntive. Qualche idea?Corrispondenze di stringhe indistinte

Grazie.

Inoltre, se necessario, posso fare questo in R.

risposta

7

Avete considerato il modulo fuzzystrmatch? È possibile utilizzare soundex, difference, levenshtein, metaphone e dmetaphone o una combinazione.

fuzzystrmatch documentation

SELECT something 
FROM somewhere 
WHERE levenshtein(item1, item2) < Carefully_Selected_Threshold 

Ad esempio la distanza levenshtein da MICROSOFT a microsft è uno (1).

levenshtein(dmetaphone('MICROSOFT'), dmetaphone('MICROSFT') 

Quanto sopra restituisce zero (0). La combinazione di levenshtein e dmetaphone potrebbe aiutarti ad abbinare molti errori di ortografia.

+0

Considerate anche pg_trgm, ho avuto molto successo con esso negli scenari di deduplicazione. – maniek