Jim C. Nasby wrote:
Bruce Momjian <bruce@momjian.us>
Jim C. Nasby wrote: > Second argument to metaphone is suposed to set the limit on the > number of characters to return, but it breaks on some phrases: > > usps=# select metaphone(a,3),metaphone(a,4),metaphone(a,20) from > (select 'Hello world'::varchar AS a) a; > HLW | HLWR | HLWRLT > > usps=# select metaphone(a,3),metaphone(a,4),metaphone(a,20) from > (select 'A A COMEAUX MEMORIAL'::varchar AS a) a; > AKM | AKMKS | AKMKSMMRL > > In every case I've found that does this, the 4th and 5th letters are > always 'KS'. Nice catch. There was a bug in the original metaphone algorithm from CPAN. Patch attached (while I was at it I updated my email address, changed the copyright to PGDG, and removed an unnecessary palloc). Here's how it looks now: regression=# select metaphone(a,4) from (select 'A A COMEAUX MEMORIAL'::varchar AS a) a; metaphone ----------- AKMK (1 row) regression=# select metaphone(a,5) from (select 'A A COMEAUX MEMORIAL'::varchar AS a) a; metaphone ----------- AKMKS (1 row) Joe Conway
Files
| Path | Change | +/− |
|---|---|---|
| contrib/fuzzystrmatch/fuzzystrmatch.c | modified | +6 −5 |
| contrib/fuzzystrmatch/fuzzystrmatch.h | modified | +4 −1 |
| contrib/fuzzystrmatch/README.fuzzystrmatch | modified | +4 −1 |