annotate lisp/soundex.el @ 56811:694cd033cd0d

Make "GNU GENERAL PUBLIC LICENSE" an appendix. Rearrange order of nodes and sections such that both "GNU GENERAL PUBLIC LICENSE" and "GNU Free Documentation License" appear at the end, as appropriate for appendices. (Acknowledgments): Use `@unnumberedsec'.
author Luc Teirlinck <teirllm@auburn.edu>
date Fri, 27 Aug 2004 23:36:38 +0000
parents 695cf19ef79e
children 6fb026ad601f 375f2633d815
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15261
bd56cdc4d07b Fixed up initial line
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
1 ;;; soundex.el --- implement Soundex algorithm
5995
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1993 Free Software Foundation, Inc.
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Christian Plaunt <chris@bliss.berkeley.edu>
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 38412
diff changeset
6 ;; Maintainer: FSF
5995
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: matching
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Created: Sat May 15 14:48:18 1993
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8028
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8028
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 8028
diff changeset
25 ;; Boston, MA 02111-1307, USA.
5995
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; The Soundex algorithm maps English words into representations of
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; how they sound. Words with vaguely similar sound map to the same string.
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 18383
diff changeset
32 ;;; Code:
5995
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
7534
9b82dae27c01 (soundex-alist): Put variable before fn that uses it.
Richard M. Stallman <rms@gnu.org>
parents: 5995
diff changeset
34 (defvar soundex-alist
8028
ba1bbdb8595e (soundex-alist): Delete the elements that mapped into nil.
Richard M. Stallman <rms@gnu.org>
parents: 7534
diff changeset
35 '((?B . "1") (?F . "1") (?P . "1") (?V . "1")
7534
9b82dae27c01 (soundex-alist): Put variable before fn that uses it.
Richard M. Stallman <rms@gnu.org>
parents: 5995
diff changeset
36 (?C . "2") (?G . "2") (?J . "2") (?K . "2") (?Q . "2") (?S . "2")
9b82dae27c01 (soundex-alist): Put variable before fn that uses it.
Richard M. Stallman <rms@gnu.org>
parents: 5995
diff changeset
37 (?X . "2") (?Z . "2") (?D . "3") (?T . "3") (?L . "4") (?M . "5")
9b82dae27c01 (soundex-alist): Put variable before fn that uses it.
Richard M. Stallman <rms@gnu.org>
parents: 5995
diff changeset
38 (?N . "5") (?R . "6"))
9b82dae27c01 (soundex-alist): Put variable before fn that uses it.
Richard M. Stallman <rms@gnu.org>
parents: 5995
diff changeset
39 "Alist of chars-to-key-code for building Soundex keys.")
9b82dae27c01 (soundex-alist): Put variable before fn that uses it.
Richard M. Stallman <rms@gnu.org>
parents: 5995
diff changeset
40
5995
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 (defun soundex (word)
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 "Return a Soundex key for WORD.
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 Implemented as described in:
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 Knuth, Donald E. \"The Art of Computer Programming, Vol. 3: Sorting
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 and Searching\", Addison-Wesley (1973), pp. 391-392."
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 (let* ((word (upcase word)) (length (length word))
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 (code (cdr (assq (aref word 0) soundex-alist)))
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 (key (substring word 0 1)) (index 1) (prev-code code))
8028
ba1bbdb8595e (soundex-alist): Delete the elements that mapped into nil.
Richard M. Stallman <rms@gnu.org>
parents: 7534
diff changeset
49 ;; once we have a four char key, we're done
5995
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 (while (and (> 4 (length key)) (< index length))
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;; look up the code for each letter in word at index
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 (setq code (cdr (assq (aref word index) soundex-alist))
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 index (1+ index)
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; append code to key unless the same codes belong to
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; adjacent letters in the original string
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 key (concat key (if (or (null code) (string= code prev-code))
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ()
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 code))
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 prev-code code))
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; return a key that is 4 chars long and padded by "0"s if needed
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 (if (> 4 (length key))
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 (substring (concat key "000") 0 4)
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 key)))
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;(defvar soundex-test
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ; '("Euler" "Gauss" "Hilbert" "Knuth" "Lloyd" "Lukasiewicz"
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ; "Ellery" "Ghosh" "Heilbronn" "Kant" "Ladd" "Lissajous")
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ; "\n Knuth's names to demonstrate the Soundex algorithm.")
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;(mapcar 'soundex soundex-test)
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;("E460" "G200" "H416" "K530" "L300" "L222"
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ; "E460" "G200" "H416" "K530" "L300" "L222")
a24f3890171e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
74 (provide 'soundex)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
75
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49597
diff changeset
76 ;;; arch-tag: b2615a98-feb7-430e-a717-171086738953
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 18383
diff changeset
77 ;;; soundex.el ends here