mirror of https://github.com/postgres/postgres
specify the cost values to use, instead of always using 1's. Volkan Yazici In passing, remove fuzzystrmatch.h, which contained a bunch of stuff that had no business being in a .h file; fold it into its only user, fuzzystrmatch.c.REL8_5_ALPHA1_BRANCH
parent
bbe48195ab
commit
55f6e5f689
@ -1,171 +0,0 @@ |
|||||||
/*
|
|
||||||
* fuzzystrmatch.h |
|
||||||
* |
|
||||||
* Functions for "fuzzy" comparison of strings |
|
||||||
* |
|
||||||
* Joe Conway <mail@joeconway.com> |
|
||||||
* |
|
||||||
* $PostgreSQL: pgsql/contrib/fuzzystrmatch/fuzzystrmatch.h,v 1.17 2008/03/25 22:42:41 tgl Exp $ |
|
||||||
* Copyright (c) 2001-2008, 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. |
|
||||||
* |
|
||||||
* 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. |
|
||||||
* |
|
||||||
*/ |
|
||||||
|
|
||||||
#ifndef FUZZYSTRMATCH_H |
|
||||||
#define FUZZYSTRMATCH_H |
|
||||||
|
|
||||||
#include "postgres.h" |
|
||||||
|
|
||||||
#include <ctype.h> |
|
||||||
|
|
||||||
#include "fmgr.h" |
|
||||||
#include "utils/builtins.h" |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* External declarations |
|
||||||
*/ |
|
||||||
extern Datum levenshtein(PG_FUNCTION_ARGS); |
|
||||||
extern Datum metaphone(PG_FUNCTION_ARGS); |
|
||||||
extern Datum soundex(PG_FUNCTION_ARGS); |
|
||||||
extern Datum difference(PG_FUNCTION_ARGS); |
|
||||||
|
|
||||||
/*
|
|
||||||
* Soundex |
|
||||||
*/ |
|
||||||
static void _soundex(const char *instr, char *outstr); |
|
||||||
|
|
||||||
#define SOUNDEX_LEN 4 |
|
||||||
|
|
||||||
/* ABCDEFGHIJKLMNOPQRSTUVWXYZ */ |
|
||||||
static const char *soundex_table = "01230120022455012623010202"; |
|
||||||
|
|
||||||
#define soundex_code(letter) soundex_table[toupper((unsigned char) (letter)) - 'A'] |
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Levenshtein |
|
||||||
*/ |
|
||||||
#define MAX_LEVENSHTEIN_STRLEN 255 |
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Metaphone |
|
||||||
*/ |
|
||||||
#define MAX_METAPHONE_STRLEN 255 |
|
||||||
|
|
||||||
/*
|
|
||||||
* Original code by Michael G Schwern starts here. |
|
||||||
* Code slightly modified for use as PostgreSQL |
|
||||||
* function (combined *.h into here). |
|
||||||
*------------------------------------------------------------------*/ |
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
metaphone -- Breaks english phrases down into their phonemes. |
|
||||||
|
|
||||||
Input |
|
||||||
word -- An english word to be phonized |
|
||||||
max_phonemes -- How many phonemes to calculate. If 0, then it |
|
||||||
will phonize the entire phrase. |
|
||||||
phoned_word -- The final phonized word. (We'll allocate the |
|
||||||
memory.) |
|
||||||
Output |
|
||||||
error -- A simple error flag, returns TRUE or FALSE |
|
||||||
|
|
||||||
NOTES: ALL non-alpha characters are ignored, this includes whitespace, |
|
||||||
although non-alpha characters will break up phonemes. |
|
||||||
****************************************************************************/ |
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
my constants -- constants I like |
|
||||||
|
|
||||||
Probably redundant. |
|
||||||
|
|
||||||
***************************************************************************/ |
|
||||||
|
|
||||||
#define META_ERROR FALSE |
|
||||||
#define META_SUCCESS TRUE |
|
||||||
#define META_FAILURE FALSE |
|
||||||
|
|
||||||
|
|
||||||
/* I add modifications to the traditional metaphone algorithm that you
|
|
||||||
might find in books. Define this if you want metaphone to behave |
|
||||||
traditionally */ |
|
||||||
#undef USE_TRADITIONAL_METAPHONE |
|
||||||
|
|
||||||
/* Special encodings */ |
|
||||||
#define SH 'X' |
|
||||||
#define TH '0' |
|
||||||
|
|
||||||
char Lookahead(char *word, int how_far); |
|
||||||
int |
|
||||||
_metaphone( |
|
||||||
/* IN */ |
|
||||||
char *word, |
|
||||||
int max_phonemes, |
|
||||||
/* OUT */ |
|
||||||
char **phoned_word |
|
||||||
); |
|
||||||
|
|
||||||
/* Metachar.h ... little bits about characters for metaphone */ |
|
||||||
|
|
||||||
|
|
||||||
/*-- Character encoding array & accessing macros --*/ |
|
||||||
/* Stolen directly out of the book... */ |
|
||||||
char _codes[26] = { |
|
||||||
1, 16, 4, 16, 9, 2, 4, 16, 9, 2, 0, 2, 2, 2, 1, 4, 0, 2, 4, 4, 1, 0, 0, 0, 8, 0 |
|
||||||
/* a b c d e f g h i j k l m n o p q r s t u v w x y z */ |
|
||||||
}; |
|
||||||
|
|
||||||
|
|
||||||
#define ENCODE(c) (isalpha((unsigned char) (c)) ? _codes[((toupper((unsigned char) (c))) - 'A')] : 0) |
|
||||||
|
|
||||||
#define isvowel(c) (ENCODE(c) & 1) /* AEIOU */ |
|
||||||
|
|
||||||
/* These letters are passed through unchanged */ |
|
||||||
#define NOCHANGE(c) (ENCODE(c) & 2) /* FJMNR */ |
|
||||||
|
|
||||||
/* These form dipthongs when preceding H */ |
|
||||||
#define AFFECTH(c) (ENCODE(c) & 4) /* CGPST */ |
|
||||||
|
|
||||||
/* These make C and G soft */ |
|
||||||
#define MAKESOFT(c) (ENCODE(c) & 8) /* EIY */ |
|
||||||
|
|
||||||
/* These prevent GH from becoming F */ |
|
||||||
#define NOGHTOF(c) (ENCODE(c) & 16) /* BDH */ |
|
||||||
|
|
||||||
#endif /* FUZZYSTRMATCH_H */ |
|
Loading…
Reference in new issue