mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-11-27 07:21:09 +08:00
29dccf5fe0
back-stamped for this.
145 lines
4.0 KiB
Plaintext
145 lines
4.0 KiB
Plaintext
/*
|
|
* fuzzystrmatch.c
|
|
*
|
|
* Functions for "fuzzy" comparison of strings
|
|
*
|
|
* Joe Conway <mail@joeconway.com>
|
|
*
|
|
* Copyright (c) 2001-2007, PostgreSQL Global Development Group
|
|
* ALL RIGHTS RESERVED;
|
|
*
|
|
* levenshtein()
|
|
* -------------
|
|
* Written based on a description of the algorithm by Michael Gilleland
|
|
* found at http://www.merriampark.com/ld.htm
|
|
* Also looked at levenshtein.c in the PHP 4.0.6 distribution for
|
|
* inspiration.
|
|
*
|
|
* metaphone()
|
|
* -----------
|
|
* Modified for PostgreSQL by Joe Conway.
|
|
* Based on CPAN's "Text-Metaphone-1.96" by Michael G Schwern <schwern@pobox.com>
|
|
* Code slightly modified for use as PostgreSQL function (palloc, elog, etc).
|
|
* Metaphone was originally created by Lawrence Philips and presented in article
|
|
* in "Computer Language" December 1990 issue.
|
|
*
|
|
* dmetaphone() and dmetaphone_alt()
|
|
* ---------------------------------
|
|
* A port of the DoubleMetaphone perl module by Andrew Dunstan. See dmetaphone.c
|
|
* for more detail.
|
|
*
|
|
* soundex()
|
|
* -----------
|
|
* Folded existing soundex contrib into this one. Renamed text_soundex() (C function)
|
|
* to soundex() for consistency.
|
|
*
|
|
* difference()
|
|
* ------------
|
|
* Return the difference between two strings' soundex values. Kris Jurka
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software and its
|
|
* documentation for any purpose, without fee, and without a written agreement
|
|
* is hereby granted, provided that the above copyright notice and this
|
|
* paragraph and the following two paragraphs appear in all copies.
|
|
*
|
|
* IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR
|
|
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
|
|
* LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
|
|
* DOCUMENTATION, EVEN IF THE AUTHOR OR DISTRIBUTORS HAVE BEEN ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
|
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
|
|
* ON AN "AS IS" BASIS, AND THE AUTHOR AND DISTRIBUTORS HAS NO OBLIGATIONS TO
|
|
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
|
*
|
|
*/
|
|
|
|
|
|
Version 0.3 (30 June, 2004):
|
|
|
|
Release Notes:
|
|
Version 0.3
|
|
- added double metaphone code from Andrew Dunstan
|
|
- change metaphone so that an empty input string causes an empty
|
|
output string to be returned, instead of throwing an ERROR
|
|
- fixed examples in README.soundex
|
|
|
|
Version 0.2
|
|
- folded soundex contrib into this one
|
|
|
|
Version 0.1
|
|
- initial release
|
|
|
|
Installation:
|
|
Place these files in a directory called 'fuzzystrmatch' under 'contrib' in the PostgreSQL source tree. Then run:
|
|
|
|
make
|
|
make install
|
|
|
|
You can use fuzzystrmatch.sql to create the functions in your database of choice, e.g.
|
|
|
|
psql -U postgres template1 < fuzzystrmatch.sql
|
|
|
|
installs following functions into database template1:
|
|
|
|
levenshtein() - calculates the levenshtein distance between two strings
|
|
metaphone() - calculates the metaphone code of an input string
|
|
|
|
Documentation
|
|
==================================================================
|
|
Name
|
|
|
|
levenshtein -- calculates the levenshtein distance between two strings
|
|
|
|
Synopsis
|
|
|
|
levenshtein(text source, text target)
|
|
|
|
Inputs
|
|
|
|
source
|
|
any text string, 255 characters max, NOT NULL
|
|
|
|
target
|
|
any text string, 255 characters max, NOT NULL
|
|
|
|
Outputs
|
|
|
|
Returns int
|
|
|
|
Example usage
|
|
|
|
select levenshtein('GUMBO','GAMBOL');
|
|
|
|
==================================================================
|
|
Name
|
|
|
|
metaphone -- calculates the metaphone code of an input string
|
|
|
|
Synopsis
|
|
|
|
metaphone(text source, int max_output_length)
|
|
|
|
Inputs
|
|
|
|
source
|
|
any text string, 255 characters max, NOT NULL
|
|
|
|
max_output_length
|
|
maximum length of the output metaphone code; if longer, the output
|
|
is truncated to this length
|
|
|
|
Outputs
|
|
|
|
Returns text
|
|
|
|
Example usage
|
|
|
|
select metaphone('GUMBO',4);
|
|
|
|
==================================================================
|
|
-- Joe Conway
|
|
|