Documentation Source Text

Hex Artifact Content
Login

Artifact 0c2a97600290fd17baec9b5bce8061279e57dc7281c61efbbf618b9da850e17b:


0000: 3c 74 69 74 6c 65 3e 54 68 65 20 53 70 65 6c 6c  <title>The Spell
0010: 66 69 78 31 20 56 69 72 74 75 61 6c 20 54 61 62  fix1 Virtual Tab
0020: 6c 65 3c 2f 74 69 74 6c 65 3e 0a 3c 74 63 6c 3e  le</title>.<tcl>
0030: 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 73 70  .hd_keywords {sp
0040: 65 6c 6c 66 69 78 31 7d 3c 2f 74 63 6c 3e 0a 3c  ellfix1}</tcl>.<
0050: 74 61 62 6c 65 5f 6f 66 5f 63 6f 6e 74 65 6e 74  table_of_content
0060: 73 3e 0a 0a 3c 68 31 3e 4f 76 65 72 76 69 65 77  s>..<h1>Overview
0070: 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 73  </h1>..<p>This s
0080: 70 65 6c 6c 66 69 78 31 20 5b 76 69 72 74 75 61  pellfix1 [virtua
0090: 6c 20 74 61 62 6c 65 5d 20 63 61 6e 20 62 65 20  l table] can be 
00a0: 75 73 65 64 20 74 6f 20 73 65 61 72 63 68 0a 61  used to search.a
00b0: 20 6c 61 72 67 65 20 76 6f 63 61 62 75 6c 61 72   large vocabular
00c0: 79 20 66 6f 72 20 63 6c 6f 73 65 20 6d 61 74 63  y for close matc
00d0: 68 65 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  hes.  For exampl
00e0: 65 2c 20 73 70 65 6c 6c 66 69 78 31 0a 63 61 6e  e, spellfix1.can
00f0: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 67 67   be used to sugg
0100: 65 73 74 20 63 6f 72 72 65 63 74 69 6f 6e 73 20  est corrections 
0110: 74 6f 20 6d 69 73 73 70 65 6c 6c 65 64 20 77 6f  to misspelled wo
0120: 72 64 73 2e 20 20 4f 72 2c 0a 69 74 20 63 6f 75  rds.  Or,.it cou
0130: 6c 64 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ld be used with 
0140: 5b 46 54 53 34 5d 20 74 6f 20 64 6f 20 66 75 6c  [FTS4] to do ful
0150: 6c 2d 74 65 78 74 20 73 65 61 72 63 68 20 75 73  l-text search us
0160: 69 6e 67 20 70 6f 74 65 6e 74 69 61 6c 6c 79 0a  ing potentially.
0170: 6d 69 73 73 70 65 6c 6c 65 64 20 77 6f 72 64 73  misspelled words
0180: 2e 0a 0a 3c 70 3e 54 68 65 20 69 6d 70 6c 65 6d  ...<p>The implem
0190: 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  entation for the
01a0: 20 73 70 65 6c 6c 66 69 78 31 20 76 69 72 74 75   spellfix1 virtu
01b0: 61 6c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64  al table is held
01c0: 20 69 6e 20 74 68 65 0a 53 51 4c 69 74 65 20 73   in the.SQLite s
01d0: 6f 75 72 63 65 20 74 72 65 65 20 69 6e 20 74 68  ource tree in th
01e0: 65 20 6d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20  e miscellaneous 
01f0: 65 78 74 65 6e 73 69 6f 6e 73 20 66 6f 6c 64 65  extensions folde
0200: 72 20 61 6e 64 20 69 6e 0a 70 61 72 74 69 63 75  r and in.particu
0210: 6c 61 72 20 69 6e 20 74 68 65 20 66 69 6c 65 20  lar in the file 
0220: 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c  .[http://www.sql
0230: 69 74 65 2e 6f 72 67 2f 73 72 63 2f 66 69 6e 66  ite.org/src/finf
0240: 6f 3f 6e 61 6d 65 3d 65 78 74 2f 6d 69 73 63 2f  o?name=ext/misc/
0250: 73 70 65 6c 6c 66 69 78 2e 63 7c 65 78 74 2f 6d  spellfix.c|ext/m
0260: 69 73 63 2f 73 70 65 6c 6c 66 69 78 31 2e 63 5d  isc/spellfix1.c]
0270: 2e 0a 54 68 65 20 73 70 65 6c 6c 66 69 78 31 20  ..The spellfix1 
0280: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
0290: 20 6e 6f 74 20 69 6e 63 6c 75 64 65 64 20 69 6e   not included in
02a0: 20 74 68 65 20 53 51 4c 69 74 65 20 5b 61 6d 61   the SQLite [ama
02b0: 6c 67 61 6d 61 74 69 6f 6e 5d 0a 61 6e 64 20 69  lgamation].and i
02c0: 73 20 6e 6f 74 20 61 20 70 61 72 74 20 6f 66 20  s not a part of 
02d0: 61 6e 79 20 73 74 61 6e 64 61 72 64 20 53 51 4c  any standard SQL
02e0: 69 74 65 20 62 75 69 6c 64 2e 20 20 49 74 20 69  ite build.  It i
02f0: 73 20 61 20 5b 6c 6f 61 64 61 62 6c 65 20 65 78  s a [loadable ex
0300: 74 65 6e 73 69 6f 6e 5d 2e 0a 0a 3c 70 3e 4f 6e  tension]...<p>On
0310: 63 65 20 74 68 65 20 73 70 65 6c 6c 66 69 78 31  ce the spellfix1
0320: 20 65 78 74 65 6e 73 69 6f 6e 20 69 73 20 6c 6f   extension is lo
0330: 61 64 65 64 2c 20 61 6e 20 69 6e 73 74 61 6e 63  aded, an instanc
0340: 65 20 6f 66 20 74 68 65 20 73 70 65 6c 6c 66 69  e of the spellfi
0350: 78 31 20 0a 76 69 72 74 75 61 6c 20 74 61 62 6c  x1 .virtual tabl
0360: 65 20 69 73 20 63 72 65 61 74 65 64 20 6c 69 6b  e is created lik
0370: 65 20 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  e this:..<blockq
0380: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
0390: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
03a0: 64 65 6d 6f 20 55 53 49 4e 47 20 73 70 65 6c 6c  demo USING spell
03b0: 66 69 78 31 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  fix1;.</pre></bl
03c0: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
03d0: 65 20 22 73 70 65 6c 6c 66 69 78 31 22 20 74 65  e "spellfix1" te
03e0: 72 6d 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  rm is the name o
03f0: 66 20 74 68 65 20 73 70 65 6c 6c 66 69 78 20 6d  f the spellfix m
0400: 6f 64 75 6c 65 20 61 6e 64 20 6d 75 73 74 20 62  odule and must b
0410: 65 20 0a 65 6e 74 65 72 65 64 20 61 73 20 73 68  e .entered as sh
0420: 6f 77 6e 2e 20 20 54 68 65 20 22 64 65 6d 6f 22  own.  The "demo"
0430: 20 74 65 72 6d 20 69 73 20 74 68 65 0a 6e 61 6d   term is the.nam
0440: 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  e of the virtual
0450: 20 74 61 62 6c 65 20 79 6f 75 20 77 69 6c 6c 20   table you will 
0460: 62 65 20 63 72 65 61 74 69 6e 67 20 61 6e 64 20  be creating and 
0470: 63 61 6e 20 62 65 20 61 6c 74 65 72 65 64 0a 74  can be altered.t
0480: 6f 20 73 75 69 74 20 74 68 65 20 6e 65 65 64 73  o suit the needs
0490: 20 6f 66 20 79 6f 75 72 20 61 70 70 6c 69 63 61   of your applica
04a0: 74 69 6f 6e 2e 20 20 54 68 65 20 76 69 72 74 75  tion.  The virtu
04b0: 61 6c 20 74 61 62 6c 65 20 69 73 20 69 6e 69 74  al table is init
04c0: 69 61 6c 6c 79 0a 65 6d 70 74 79 2e 20 20 49 6e  ially.empty.  In
04d0: 20 6f 72 64 65 72 20 66 6f 72 20 74 68 65 20 76   order for the v
04e0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 6f 20  irtual table to 
04f0: 62 65 20 75 73 65 66 75 6c 2c 20 79 6f 75 20 77  be useful, you w
0500: 69 6c 6c 20 6e 65 65 64 20 74 6f 0a 70 6f 70 75  ill need to.popu
0510: 6c 61 74 65 20 69 74 20 77 69 74 68 20 79 6f 75  late it with you
0520: 72 20 76 6f 63 61 62 75 6c 61 72 79 2e 20 20 53  r vocabulary.  S
0530: 75 70 70 6f 73 65 20 79 6f 75 0a 68 61 76 65 20  uppose you.have 
0540: 61 20 6c 69 73 74 20 6f 66 20 77 6f 72 64 73 20  a list of words 
0550: 69 6e 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  in a table named
0560: 20 22 62 69 67 5f 76 6f 63 61 62 75 6c 61 72 79   "big_vocabulary
0570: 22 2e 20 20 54 68 65 6e 20 64 6f 20 74 68 69 73  ".  Then do this
0580: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
0590: 70 72 65 3e 0a 49 4e 53 45 52 54 20 49 4e 54 4f  pre>.INSERT INTO
05a0: 20 64 65 6d 6f 28 77 6f 72 64 29 20 53 45 4c 45   demo(word) SELE
05b0: 43 54 20 77 6f 72 64 20 46 52 4f 4d 20 62 69 67  CT word FROM big
05c0: 5f 76 6f 63 61 62 75 6c 61 72 79 3b 0a 3c 2f 70  _vocabulary;.</p
05d0: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
05e0: 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 69 6e 74 65  ..<p>If you inte
05f0: 6e 64 20 74 6f 20 75 73 65 20 74 68 69 73 20 76  nd to use this v
0600: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
0610: 63 6f 6f 70 65 72 61 74 69 6f 6e 20 77 69 74 68  cooperation with
0620: 20 61 6e 20 5b 46 54 53 34 5d 0a 74 61 62 6c 65   an [FTS4].table
0630: 20 28 66 6f 72 20 73 70 65 6c 6c 69 6e 67 20 63   (for spelling c
0640: 6f 72 72 65 63 74 69 6f 6e 20 6f 66 20 73 65 61  orrection of sea
0650: 72 63 68 20 74 65 72 6d 73 29 20 74 68 65 6e 20  rch terms) then 
0660: 79 6f 75 20 6d 69 67 68 74 20 65 78 74 72 61 63  you might extrac
0670: 74 0a 74 68 65 20 76 6f 63 61 62 75 6c 61 72 79  t.the vocabulary
0680: 20 75 73 69 6e 67 20 61 6e 20 5b 66 74 73 34 61   using an [fts4a
0690: 75 78 5d 20 74 61 62 6c 65 3a 0a 0a 3c 62 6c 6f  ux] table:..<blo
06a0: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 49 4e  ckquote><pre>.IN
06b0: 53 45 52 54 20 49 4e 54 4f 20 64 65 6d 6f 28 77  SERT INTO demo(w
06c0: 6f 72 64 29 20 53 45 4c 45 43 54 20 74 65 72 6d  ord) SELECT term
06d0: 20 46 52 4f 4d 20 73 65 61 72 63 68 5f 61 75 78   FROM search_aux
06e0: 20 57 48 45 52 45 20 63 6f 6c 3d 27 2a 27 3b 0a   WHERE col='*';.
06f0: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
0700: 74 65 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e 20  te>..<p>You can 
0710: 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 74 68 65  also provide the
0720: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77   virtual table w
0730: 69 74 68 20 61 20 22 72 61 6e 6b 22 20 66 6f 72  ith a "rank" for
0740: 20 65 61 63 68 20 77 6f 72 64 2e 0a 54 68 65 20   each word..The 
0750: 22 72 61 6e 6b 22 20 69 73 20 61 6e 20 65 73 74  "rank" is an est
0760: 69 6d 61 74 65 20 6f 66 20 68 6f 77 20 63 6f 6d  imate of how com
0770: 6d 6f 6e 20 74 68 65 20 77 6f 72 64 20 69 73 2e  mon the word is.
0780: 20 20 4c 61 72 67 65 72 20 6e 75 6d 62 65 72 73    Larger numbers
0790: 0a 6d 65 61 6e 20 74 68 65 20 77 6f 72 64 20 69  .mean the word i
07a0: 73 20 6d 6f 72 65 20 63 6f 6d 6d 6f 6e 2e 20 20  s more common.  
07b0: 49 66 20 79 6f 75 20 6f 6d 69 74 20 74 68 65 20  If you omit the 
07c0: 72 61 6e 6b 20 77 68 65 6e 20 70 6f 70 75 6c 61  rank when popula
07d0: 74 69 6e 67 0a 74 68 65 20 74 61 62 6c 65 2c 20  ting.the table, 
07e0: 74 68 65 6e 20 61 20 72 61 6e 6b 20 6f 66 20 31  then a rank of 1
07f0: 20 69 73 20 61 73 73 75 6d 65 64 2e 20 20 42 75   is assumed.  Bu
0800: 74 20 69 66 20 79 6f 75 20 68 61 76 65 20 72 61  t if you have ra
0810: 6e 6b 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  nk .information,
0820: 20 79 6f 75 20 63 61 6e 20 73 75 70 70 6c 79 20   you can supply 
0830: 69 74 20 61 6e 64 20 74 68 65 20 76 69 72 74 75  it and the virtu
0840: 61 6c 20 74 61 62 6c 65 20 77 69 6c 6c 20 73 68  al table will sh
0850: 6f 77 20 61 0a 73 6c 69 67 68 74 20 70 72 65 66  ow a.slight pref
0860: 65 72 65 6e 63 65 20 66 6f 72 20 73 65 6c 65 63  erence for selec
0870: 74 69 6e 67 20 6d 6f 72 65 20 63 6f 6d 6d 6f 6e  ting more common
0880: 6c 79 20 75 73 65 64 20 74 65 72 6d 73 2e 20 20  ly used terms.  
0890: 54 6f 0a 70 6f 70 75 6c 61 74 65 20 74 68 65 20  To.populate the 
08a0: 72 61 6e 6b 20 66 72 6f 6d 20 61 6e 20 66 74 73  rank from an fts
08b0: 34 61 75 78 20 74 61 62 6c 65 20 22 73 65 61 72  4aux table "sear
08c0: 63 68 5f 61 75 78 22 20 64 6f 20 73 6f 6d 65 74  ch_aux" do somet
08d0: 68 69 6e 67 0a 6c 69 6b 65 20 74 68 69 73 3a 0a  hing.like this:.
08e0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
08f0: 65 3e 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 64  e>.INSERT INTO d
0900: 65 6d 6f 28 77 6f 72 64 2c 72 61 6e 6b 29 0a 20  emo(word,rank). 
0910: 20 20 53 45 4c 45 43 54 20 74 65 72 6d 2c 20 64    SELECT term, d
0920: 6f 63 75 6d 65 6e 74 73 20 46 52 4f 4d 20 73 65  ocuments FROM se
0930: 61 72 63 68 5f 61 75 78 20 57 48 45 52 45 20 63  arch_aux WHERE c
0940: 6f 6c 3d 27 2a 27 3b 0a 3c 2f 70 72 65 3e 3c 2f  ol='*';.</pre></
0950: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
0960: 54 6f 20 71 75 65 72 79 20 74 68 65 20 76 69 72  To query the vir
0970: 74 75 61 6c 20 74 61 62 6c 65 2c 20 69 6e 63 6c  tual table, incl
0980: 75 64 65 20 61 20 4d 41 54 43 48 20 6f 70 65 72  ude a MATCH oper
0990: 61 74 6f 72 20 69 6e 20 74 68 65 20 57 48 45 52  ator in the WHER
09a0: 45 0a 63 6c 61 75 73 65 2e 20 20 46 6f 72 20 65  E.clause.  For e
09b0: 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71  xample:..<blockq
09c0: 75 6f 74 65 3e 3c 70 72 65 3e 0a 53 45 4c 45 43  uote><pre>.SELEC
09d0: 54 20 77 6f 72 64 20 46 52 4f 4d 20 64 65 6d 6f  T word FROM demo
09e0: 20 57 48 45 52 45 20 77 6f 72 64 20 4d 41 54 43   WHERE word MATC
09f0: 48 20 27 6b 65 6e 6e 61 73 61 77 27 3b 0a 3c 2f  H 'kennasaw';.</
0a00: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
0a10: 3e 0a 0a 3c 70 3e 55 73 69 6e 67 20 61 20 64 61  >..<p>Using a da
0a20: 74 61 73 65 74 20 6f 66 20 41 6d 65 72 69 63 61  taset of America
0a30: 6e 20 70 6c 61 63 65 20 6e 61 6d 65 73 20 28 64  n place names (d
0a40: 65 72 69 76 65 64 20 66 72 6f 6d 0a 5b 68 74 74  erived from.[htt
0a50: 70 3a 2f 2f 67 65 6f 6e 61 6d 65 73 2e 75 73 67  p://geonames.usg
0a60: 73 2e 67 6f 76 2f 64 6f 6d 65 73 74 69 63 2f 64  s.gov/domestic/d
0a70: 6f 77 6e 6c 6f 61 64 5f 64 61 74 61 2e 68 74 6d  ownload_data.htm
0a80: 5d 29 20 74 68 65 20 71 75 65 72 79 20 61 62 6f  ]) the query abo
0a90: 76 65 0a 72 65 74 75 72 6e 73 20 32 30 20 72 65  ve.returns 20 re
0aa0: 73 75 6c 74 73 20 62 65 67 69 6e 6e 69 6e 67 20  sults beginning 
0ab0: 77 69 74 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  with:..<blockquo
0ac0: 74 65 3e 3c 70 72 65 3e 0a 6b 65 6e 6e 65 73 61  te><pre>.kennesa
0ad0: 77 0a 6b 65 6e 6f 73 68 61 0a 6b 65 6e 65 73 61  w.kenosha.kenesa
0ae0: 77 0a 6b 65 6e 61 67 61 0a 6b 65 61 6e 61 6b 0a  w.kenaga.keanak.
0af0: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
0b00: 74 65 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 61  te>..<p>If you a
0b10: 70 70 65 6e 64 20 74 68 65 20 63 68 61 72 61 63  ppend the charac
0b20: 74 65 72 20 27 2a 27 20 74 6f 20 74 68 65 20 65  ter '*' to the e
0b30: 6e 64 20 6f 66 20 74 68 65 20 70 61 74 74 65 72  nd of the patter
0b40: 6e 2c 20 74 68 65 6e 0a 61 20 70 72 65 66 69 78  n, then.a prefix
0b50: 20 73 65 61 72 63 68 20 69 73 20 70 65 72 66 6f   search is perfo
0b60: 72 6d 65 64 2e 20 20 46 6f 72 20 65 78 61 6d 70  rmed.  For examp
0b70: 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  le:..<blockquote
0b80: 3e 3c 70 72 65 3e 0a 53 45 4c 45 43 54 20 77 6f  ><pre>.SELECT wo
0b90: 72 64 20 46 52 4f 4d 20 64 65 6d 6f 20 57 48 45  rd FROM demo WHE
0ba0: 52 45 20 77 6f 72 64 20 4d 41 54 43 48 20 27 6b  RE word MATCH 'k
0bb0: 65 6e 6e 65 73 2a 27 3b 0a 3c 2f 70 72 65 3e 3c  ennes*';.</pre><
0bc0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
0bd0: 3e 59 69 65 6c 64 73 20 32 30 20 72 65 73 75 6c  >Yields 20 resul
0be0: 74 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ts beginning wit
0bf0: 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  h:..<blockquote>
0c00: 3c 70 72 65 3e 0a 6b 65 6e 6e 65 73 61 77 0a 6b  <pre>.kennesaw.k
0c10: 65 6e 6e 65 73 74 6f 6e 65 0a 6b 65 6e 6e 65 73  ennestone.kennes
0c20: 6f 6e 0a 6b 65 6e 6e 65 79 73 0a 6b 65 61 6e 65  on.kenneys.keane
0c30: 73 0a 6b 65 65 6e 65 73 0a 3c 2f 70 72 65 3e 3c  s.keenes.</pre><
0c40: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68  /blockquote>..<h
0c50: 31 3e 53 65 61 72 63 68 20 52 65 66 69 6e 65 6d  1>Search Refinem
0c60: 65 6e 74 73 3c 2f 68 31 3e 0a 0a 3c 70 3e 42 79  ents</h1>..<p>By
0c70: 20 64 65 66 61 75 6c 74 2c 20 74 68 65 20 73 70   default, the sp
0c80: 65 6c 6c 66 69 78 31 20 74 61 62 6c 65 20 72 65  ellfix1 table re
0c90: 74 75 72 6e 73 20 6e 6f 20 6d 6f 72 65 20 74 68  turns no more th
0ca0: 61 6e 20 32 30 20 72 65 73 75 6c 74 73 2e 0a 28  an 20 results..(
0cb0: 49 74 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20  It might return 
0cc0: 6c 65 73 73 20 74 68 61 6e 20 32 30 20 69 66 20  less than 20 if 
0cd0: 74 68 65 72 65 20 77 65 72 65 20 66 65 77 65 72  there were fewer
0ce0: 20 67 6f 6f 64 20 6d 61 74 63 68 65 73 2e 29 0a   good matches.).
0cf0: 59 6f 75 20 63 61 6e 20 63 68 61 6e 67 65 20 74  You can change t
0d00: 68 65 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  he upper bound o
0d10: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
0d20: 72 65 74 75 72 6e 65 64 20 72 6f 77 73 20 62 79  returned rows by
0d30: 0a 61 64 64 69 6e 67 20 61 20 22 74 6f 70 3d 4e  .adding a "top=N
0d40: 22 20 74 65 72 6d 20 74 6f 20 74 68 65 20 57 48  " term to the WH
0d50: 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 79 6f  ERE clause of yo
0d60: 75 72 20 71 75 65 72 79 2c 20 77 68 65 72 65 20  ur query, where 
0d70: 4e 0a 69 73 20 74 68 65 20 6e 65 77 20 6d 61 78  N.is the new max
0d80: 69 6d 75 6d 2e 20 20 46 6f 72 20 65 78 61 6d 70  imum.  For examp
0d90: 6c 65 2c 20 74 6f 20 73 65 65 20 74 68 65 20 35  le, to see the 5
0da0: 20 62 65 73 74 20 6d 61 74 63 68 65 73 3a 0a 0a   best matches:..
0db0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
0dc0: 3e 0a 53 45 4c 45 43 54 20 77 6f 72 64 20 46 52  >.SELECT word FR
0dd0: 4f 4d 20 64 65 6d 6f 20 57 48 45 52 45 20 77 6f  OM demo WHERE wo
0de0: 72 64 20 4d 41 54 43 48 20 27 6b 65 6e 6e 65 73  rd MATCH 'kennes
0df0: 2a 27 20 41 4e 44 20 74 6f 70 3d 35 3b 0a 3c 2f  *' AND top=5;.</
0e00: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
0e10: 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e 74 72 79  >..<p>Each entry
0e20: 20 69 6e 20 74 68 65 20 73 70 65 6c 6c 66 69 78   in the spellfix
0e30: 31 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  1 virtual table 
0e40: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
0e50: 74 68 0a 61 20 70 61 72 74 69 63 75 6c 61 72 20  th.a particular 
0e60: 6c 61 6e 67 75 61 67 65 2c 20 69 64 65 6e 74 69  language, identi
0e70: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
0e80: 67 65 72 20 22 6c 61 6e 67 69 64 22 20 63 6f 6c  ger "langid" col
0e90: 75 6d 6e 2e 0a 54 68 65 20 64 65 66 61 75 6c 74  umn..The default
0ea0: 20 6c 61 6e 67 69 64 20 69 73 20 30 20 61 6e 64   langid is 0 and
0eb0: 20 69 66 20 6e 6f 20 6f 74 68 65 72 20 61 63 74   if no other act
0ec0: 69 6f 6e 73 20 61 72 65 20 74 61 6b 65 6e 2c 20  ions are taken, 
0ed0: 74 68 65 0a 65 6e 74 69 72 65 20 76 6f 63 61 62  the.entire vocab
0ee0: 75 6c 61 72 79 20 69 73 20 61 20 70 61 72 74 20  ulary is a part 
0ef0: 6f 66 20 74 68 65 20 30 20 6c 61 6e 67 75 61 67  of the 0 languag
0f00: 65 2e 20 20 42 75 74 20 69 66 20 79 6f 75 72 20  e.  But if your 
0f10: 61 70 70 6c 69 63 61 74 69 6f 6e 0a 6e 65 65 64  application.need
0f20: 73 20 74 6f 20 6f 70 65 72 61 74 65 20 69 6e 20  s to operate in 
0f30: 6d 75 6c 74 69 70 6c 65 20 6c 61 6e 67 75 61 67  multiple languag
0f40: 65 73 2c 20 74 68 65 6e 20 79 6f 75 20 63 61 6e  es, then you can
0f50: 20 73 70 65 63 69 66 79 20 64 69 66 66 65 72 65   specify differe
0f60: 6e 74 0a 76 6f 63 61 62 75 6c 61 72 79 20 69 74  nt.vocabulary it
0f70: 65 6d 73 20 66 6f 72 20 65 61 63 68 20 6c 61 6e  ems for each lan
0f80: 67 75 61 67 65 20 62 79 20 73 70 65 63 69 66 79  guage by specify
0f90: 69 6e 67 20 74 68 65 20 6c 61 6e 67 69 64 20 66  ing the langid f
0fa0: 69 65 6c 64 0a 77 68 65 6e 20 70 6f 70 75 6c 61  ield.when popula
0fb0: 74 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 20  ting the table. 
0fc0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c   For example:..<
0fd0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
0fe0: 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 64 65 6d  .INSERT INTO dem
0ff0: 6f 28 77 6f 72 64 2c 6c 61 6e 67 69 64 29 20 53  o(word,langid) S
1000: 45 4c 45 43 54 20 77 6f 72 64 2c 20 30 20 46 52  ELECT word, 0 FR
1010: 4f 4d 20 65 6e 5f 76 6f 63 61 62 75 6c 61 72 79  OM en_vocabulary
1020: 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 64 65  ;.INSERT INTO de
1030: 6d 6f 28 77 6f 72 64 2c 6c 61 6e 67 69 64 29 20  mo(word,langid) 
1040: 53 45 4c 45 43 54 20 77 6f 72 64 2c 20 31 20 46  SELECT word, 1 F
1050: 52 4f 4d 20 64 65 5f 76 6f 63 61 62 75 6c 61 72  ROM de_vocabular
1060: 79 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 64  y;.INSERT INTO d
1070: 65 6d 6f 28 77 6f 72 64 2c 6c 61 6e 67 69 64 29  emo(word,langid)
1080: 20 53 45 4c 45 43 54 20 77 6f 72 64 2c 20 32 20   SELECT word, 2 
1090: 46 52 4f 4d 20 66 72 5f 76 6f 63 61 62 75 6c 61  FROM fr_vocabula
10a0: 72 79 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20  ry;.INSERT INTO 
10b0: 64 65 6d 6f 28 77 6f 72 64 2c 6c 61 6e 67 69 64  demo(word,langid
10c0: 29 20 53 45 4c 45 43 54 20 77 6f 72 64 2c 20 33  ) SELECT word, 3
10d0: 20 46 52 4f 4d 20 72 75 5f 76 6f 63 61 62 75 6c   FROM ru_vocabul
10e0: 61 72 79 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  ary;.INSERT INTO
10f0: 20 64 65 6d 6f 28 77 6f 72 64 2c 6c 61 6e 67 69   demo(word,langi
1100: 64 29 20 53 45 4c 45 43 54 20 77 6f 72 64 2c 20  d) SELECT word, 
1110: 34 20 46 52 4f 4d 20 63 6e 5f 76 6f 63 61 62 75  4 FROM cn_vocabu
1120: 6c 61 72 79 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  lary;.</pre></bl
1130: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 41 66  ockquote>..<p>Af
1140: 74 65 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  ter the virtual 
1150: 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e 20 70  table has been p
1160: 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 69 74  opulated with it
1170: 65 6d 73 20 66 72 6f 6d 20 6d 75 6c 74 69 70 6c  ems from multipl
1180: 65 0a 6c 61 6e 67 75 61 67 65 73 2c 20 73 70 65  e.languages, spe
1190: 63 69 66 79 20 74 68 65 20 6c 61 6e 67 75 61 67  cify the languag
11a0: 65 20 6f 66 20 69 6e 74 65 72 65 73 74 20 75 73  e of interest us
11b0: 69 6e 67 20 61 20 22 6c 61 6e 67 69 64 3d 4e 22  ing a "langid=N"
11c0: 20 74 65 72 6d 0a 69 6e 20 74 68 65 20 57 48 45   term.in the WHE
11d0: 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
11e0: 20 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71   query:..<blockq
11f0: 75 6f 74 65 3e 3c 70 72 65 3e 0a 53 45 4c 45 43  uote><pre>.SELEC
1200: 54 20 77 6f 72 64 20 46 52 4f 4d 20 64 65 6d 6f  T word FROM demo
1210: 20 57 48 45 52 45 20 77 6f 72 64 20 4d 41 54 43   WHERE word MATC
1220: 48 20 27 68 69 6c 64 65 73 2a 27 20 41 4e 44 20  H 'hildes*' AND 
1230: 6c 61 6e 67 69 64 3d 31 3b 0a 3c 2f 70 72 65 3e  langid=1;.</pre>
1240: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
1250: 70 3e 4e 6f 74 65 20 74 68 61 74 20 69 66 20 79  p>Note that if y
1260: 6f 75 20 64 6f 20 6e 6f 74 20 69 6e 63 6c 75 64  ou do not includ
1270: 65 20 74 68 65 20 22 6c 61 6e 67 69 64 3d 4e 22  e the "langid=N"
1280: 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57 48 45   term in the WHE
1290: 52 45 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 73  RE clause,.the s
12a0: 65 61 72 63 68 20 77 69 6c 6c 20 62 65 20 61 67  earch will be ag
12b0: 61 69 6e 73 74 20 6c 61 6e 67 75 61 67 65 20 30  ainst language 0
12c0: 20 28 45 6e 67 6c 69 73 68 20 69 6e 20 74 68 65   (English in the
12d0: 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 2e 29   example above.)
12e0: 0a 41 6c 6c 20 73 70 65 6c 6c 66 69 78 31 20 73  .All spellfix1 s
12f0: 65 61 72 63 68 65 73 20 61 72 65 20 61 67 61 69  earches are agai
1300: 6e 73 74 20 61 20 73 69 6e 67 6c 65 20 6c 61 6e  nst a single lan
1310: 67 75 61 67 65 20 69 64 2e 20 20 54 68 65 72 65  guage id.  There
1320: 20 69 73 20 6e 6f 0a 77 61 79 20 74 6f 20 73 65   is no.way to se
1330: 61 72 63 68 20 61 6c 6c 20 6c 61 6e 67 75 61 67  arch all languag
1340: 65 73 20 61 74 20 6f 6e 63 65 2e 0a 20 0a 0a 3c  es at once.. ..<
1350: 68 31 3e 56 69 72 74 75 61 6c 20 54 61 62 6c 65  h1>Virtual Table
1360: 20 44 65 74 61 69 6c 73 3c 2f 68 31 3e 0a 0a 3c   Details</h1>..<
1370: 70 3e 45 61 63 68 20 72 6f 77 20 69 6e 20 74 68  p>Each row in th
1380: 65 20 73 70 65 6c 6c 66 69 78 31 20 76 69 72 74  e spellfix1 virt
1390: 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 61 20  ual table has a 
13a0: 75 6e 69 71 75 65 20 72 6f 77 69 64 20 0a 77 69  unique rowid .wi
13b0: 74 68 20 73 65 76 65 6e 20 63 6f 6c 75 6d 6e 73  th seven columns
13c0: 20 70 6c 75 73 20 66 69 76 65 20 65 78 74 72 61   plus five extra
13d0: 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e   hidden columns.
13e0: 0a 54 68 65 20 63 6f 6c 75 6d 6e 73 20 61 72 65  .The columns are
13f0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 64   as follows:..<d
1400: 6c 3e 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 72 6f 77  l>.<dt><p><b>row
1410: 69 64 3c 2f 62 3e 3c 64 64 3e 0a 41 20 75 6e 69  id</b><dd>.A uni
1420: 71 75 65 20 69 6e 74 65 67 65 72 20 6e 75 6d 62  que integer numb
1430: 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
1440: 74 68 20 65 61 63 68 0a 76 6f 63 61 62 75 6c 61  th each.vocabula
1450: 72 79 20 69 74 65 6d 20 69 6e 20 74 68 65 20 74  ry item in the t
1460: 61 62 6c 65 2e 20 20 54 68 69 73 20 63 61 6e 20  able.  This can 
1470: 62 65 20 75 73 65 64 0a 61 73 20 61 20 66 6f 72  be used.as a for
1480: 65 69 67 6e 20 6b 65 79 20 6f 6e 20 6f 74 68 65  eign key on othe
1490: 72 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  r tables in the 
14a0: 64 61 74 61 62 61 73 65 2e 0a 0a 3c 64 74 3e 3c  database...<dt><
14b0: 70 3e 3c 62 3e 77 6f 72 64 3c 2f 62 3e 3c 64 64  p><b>word</b><dd
14c0: 3e 0a 54 68 65 20 74 65 78 74 20 6f 66 20 74 68  >.The text of th
14d0: 65 20 77 6f 72 64 20 74 68 61 74 20 6d 61 74 63  e word that matc
14e0: 68 65 73 20 74 68 65 20 70 61 74 74 65 72 6e 2e  hes the pattern.
14f0: 0a 42 6f 74 68 20 77 6f 72 64 20 61 6e 64 20 70  .Both word and p
1500: 61 74 74 65 72 6e 20 63 61 6e 20 63 6f 6e 74 61  attern can conta
1510: 69 6e 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61  in unicode chara
1520: 63 74 65 72 73 0a 61 6e 64 20 63 61 6e 20 62 65  cters.and can be
1530: 20 6d 69 78 65 64 20 63 61 73 65 2e 0a 0a 3c 64   mixed case...<d
1540: 74 3e 3c 70 3e 3c 62 3e 72 61 6e 6b 3c 2f 62 3e  t><p><b>rank</b>
1550: 3c 64 64 3e 0a 54 68 69 73 20 69 73 20 74 68 65  <dd>.This is the
1560: 20 72 61 6e 6b 20 6f 66 20 74 68 65 20 77 6f 72   rank of the wor
1570: 64 2c 20 61 73 20 73 70 65 63 69 66 69 65 64 20  d, as specified 
1580: 69 6e 20 74 68 65 0a 6f 72 69 67 69 6e 61 6c 20  in the.original 
1590: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
15a0: 2e 0a 0a 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 64 69  ....<dt><p><b>di
15b0: 73 74 61 6e 63 65 3c 2f 62 3e 3c 64 64 3e 0a 54  stance</b><dd>.T
15c0: 68 69 73 20 69 73 20 61 6e 20 65 64 69 74 20 64  his is an edit d
15d0: 69 73 74 61 6e 63 65 20 6f 72 20 4c 65 76 65 6e  istance or Leven
15e0: 73 68 74 65 69 6e 20 64 69 73 74 61 6e 63 65 20  shtein distance 
15f0: 67 6f 69 6e 67 0a 66 72 6f 6d 20 74 68 65 20 70  going.from the p
1600: 61 74 74 65 72 6e 20 74 6f 20 74 68 65 20 77 6f  attern to the wo
1610: 72 64 2e 0a 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 6c  rd...<dt><p><b>l
1620: 61 6e 67 69 64 3c 2f 62 3e 3c 64 64 3e 0a 54 68  angid</b><dd>.Th
1630: 69 73 20 69 73 20 74 68 65 20 6c 61 6e 67 75 61  is is the langua
1640: 67 65 2d 69 64 20 6f 66 20 74 68 65 20 77 6f 72  ge-id of the wor
1650: 64 2e 20 20 41 6c 6c 20 71 75 65 72 69 65 73 20  d.  All queries 
1660: 61 72 65 0a 61 67 61 69 6e 73 74 20 61 20 73 69  are.against a si
1670: 6e 67 6c 65 20 6c 61 6e 67 75 61 67 65 2d 69 64  ngle language-id
1680: 2c 20 77 68 69 63 68 20 64 65 66 61 75 6c 74 73  , which defaults
1690: 20 74 6f 20 30 2e 0a 46 6f 72 20 61 6e 79 20 67   to 0..For any g
16a0: 69 76 65 6e 20 71 75 65 72 79 20 74 68 69 73 20  iven query this 
16b0: 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 61 6d  value is the sam
16c0: 65 20 6f 6e 20 61 6c 6c 20 72 6f 77 73 2e 0a 0a  e on all rows...
16d0: 3c 64 74 3e 3c 70 3e 3c 62 3e 73 63 6f 72 65 3c  <dt><p><b>score<
16e0: 2f 62 3e 3c 64 64 3e 0a 54 68 65 20 73 63 6f 72  /b><dd>.The scor
16f0: 65 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69  e is a combinati
1700: 6f 6e 20 6f 66 20 72 61 6e 6b 20 61 6e 64 20 64  on of rank and d
1710: 69 73 74 61 6e 63 65 2e 20 20 54 68 65 0a 69 64  istance.  The.id
1720: 65 61 20 69 73 20 74 68 61 74 20 61 20 6c 6f 77  ea is that a low
1730: 65 72 20 73 63 6f 72 65 20 69 73 20 62 65 74 74  er score is bett
1740: 65 72 2e 20 20 54 68 65 20 76 69 72 74 75 61 6c  er.  The virtual
1750: 20 74 61 62 6c 65 0a 61 74 74 65 6d 70 74 73 20   table.attempts 
1760: 74 6f 20 66 69 6e 64 20 77 6f 72 64 73 20 77 69  to find words wi
1770: 74 68 20 74 68 65 20 6c 6f 77 65 73 74 20 73 63  th the lowest sc
1780: 6f 72 65 20 61 6e 64 20 0a 62 79 20 64 65 66 61  ore and .by defa
1790: 75 6c 74 20 28 75 6e 6c 65 73 73 20 6f 76 65 72  ult (unless over
17a0: 72 69 64 64 65 6e 20 62 79 20 4f 52 44 45 52 20  ridden by ORDER 
17b0: 42 59 29 20 72 65 74 75 72 6e 73 0a 72 65 73 75  BY) returns.resu
17c0: 6c 74 73 20 69 6e 20 6f 72 64 65 72 20 6f 66 20  lts in order of 
17d0: 69 6e 63 72 65 61 73 69 6e 67 20 73 63 6f 72 65  increasing score
17e0: 2e 0a 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 6d 61 74  ...<dt><p><b>mat
17f0: 63 68 6c 65 6e 3c 2f 62 3e 3c 64 64 3e 0a 49 6e  chlen</b><dd>.In
1800: 20 61 20 70 72 65 66 69 78 20 73 65 61 72 63 68   a prefix search
1810: 2c 20 74 68 65 20 6d 61 74 63 68 6c 65 6e 20 69  , the matchlen i
1820: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1830: 63 68 61 72 61 63 74 65 72 73 20 69 6e 0a 74 68  characters in.th
1840: 65 20 73 74 72 69 6e 67 20 74 68 61 74 20 6d 61  e string that ma
1850: 74 63 68 20 61 67 61 69 6e 73 74 20 74 68 65 20  tch against the 
1860: 70 72 65 66 69 78 2e 20 20 46 6f 72 20 61 20 6e  prefix.  For a n
1870: 6f 6e 2d 70 72 65 66 69 78 20 73 65 61 72 63 68  on-prefix search
1880: 2c 0a 74 68 69 73 20 69 73 20 74 68 65 20 73 61  ,.this is the sa
1890: 6d 65 20 61 73 20 6c 65 6e 67 74 68 28 77 6f 72  me as length(wor
18a0: 64 29 2e 0a 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 70  d)...<dt><p><b>p
18b0: 68 6f 6e 65 68 61 73 68 3c 2f 62 3e 3c 64 64 3e  honehash</b><dd>
18c0: 0a 54 68 69 73 20 63 6f 6c 75 6d 6e 20 73 68 6f  .This column sho
18d0: 77 73 20 74 68 65 20 70 68 6f 6e 65 74 69 63 20  ws the phonetic 
18e0: 68 61 73 68 20 70 72 65 66 69 78 20 74 68 61 74  hash prefix that
18f0: 20 77 61 73 20 75 73 65 64 20 74 6f 20 72 65 73   was used to res
1900: 74 72 69 63 74 0a 74 68 65 20 73 65 61 72 63 68  trict.the search
1910: 2e 20 20 46 6f 72 20 61 6e 79 20 67 69 76 65 6e  .  For any given
1920: 20 71 75 65 72 79 2c 20 74 68 69 73 20 63 6f 6c   query, this col
1930: 75 6d 6e 20 73 68 6f 75 6c 64 20 62 65 20 74 68  umn should be th
1940: 65 20 73 61 6d 65 20 66 6f 72 0a 65 76 65 72 79  e same for.every
1950: 20 72 6f 77 2e 20 20 54 68 69 73 20 69 6e 66 6f   row.  This info
1960: 72 6d 61 74 69 6f 6e 20 69 73 20 61 76 61 69 6c  rmation is avail
1970: 61 62 6c 65 20 66 6f 72 20 64 69 61 67 6e 6f 73  able for diagnos
1980: 74 69 63 20 70 75 72 70 6f 73 65 73 20 61 6e 64  tic purposes and
1990: 0a 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79  .is not normally
19a0: 20 63 6f 6e 73 69 64 65 72 65 64 20 75 73 65 66   considered usef
19b0: 75 6c 20 69 6e 20 72 65 61 6c 20 61 70 70 6c 69  ul in real appli
19c0: 63 61 74 69 6f 6e 73 2e 0a 0a 3c 64 74 3e 3c 70  cations...<dt><p
19d0: 3e 3c 62 3e 74 6f 70 3c 2f 62 3e 3c 64 64 3e 0a  ><b>top</b><dd>.
19e0: 28 48 49 44 44 45 4e 29 20 20 46 6f 72 20 61 6e  (HIDDEN)  For an
19f0: 79 20 71 75 65 72 79 2c 20 74 68 69 73 20 76 61  y query, this va
1a00: 6c 75 65 20 69 73 20 74 68 65 20 73 61 6d 65 20  lue is the same 
1a10: 6f 6e 20 61 6c 6c 0a 72 6f 77 73 2e 20 20 49 74  on all.rows.  It
1a20: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 77   is an integer w
1a30: 68 69 63 68 20 69 73 20 74 68 65 20 6d 61 78 69  hich is the maxi
1a40: 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f  mum number of.ro
1a50: 77 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ws that will be 
1a60: 6f 75 74 70 75 74 2e 20 20 54 68 65 20 61 63 74  output.  The act
1a70: 75 61 6c 6c 79 20 6e 75 6d 62 65 72 20 6f 66 20  ually number of 
1a80: 72 6f 77 73 0a 6f 75 74 70 75 74 20 6d 69 67 68  rows.output migh
1a90: 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74  t be less than t
1aa0: 68 69 73 20 6e 75 6d 62 65 72 2c 20 62 75 74 20  his number, but 
1ab0: 69 74 20 77 69 6c 6c 20 6e 65 76 65 72 0a 62 65  it will never.be
1ac0: 20 67 72 65 61 74 65 72 2e 20 20 54 68 65 20 64   greater.  The d
1ad0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
1ae0: 20 74 6f 70 20 69 73 20 32 30 2c 20 62 75 74 20   top is 20, but 
1af0: 74 68 61 74 0a 63 61 6e 20 62 65 20 63 68 61 6e  that.can be chan
1b00: 67 65 64 20 66 6f 72 20 65 61 63 68 20 71 75 65  ged for each que
1b10: 72 79 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 20  ry by including 
1b20: 61 20 74 65 72 6d 20 6f 66 0a 74 68 65 20 66 6f  a term of.the fo
1b30: 72 6d 20 22 74 6f 70 3d 4e 22 20 69 6e 20 74 68  rm "top=N" in th
1b40: 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
1b50: 66 20 74 68 65 20 71 75 65 72 79 2e 0a 0a 3c 64  f the query...<d
1b60: 74 3e 3c 70 3e 3c 62 3e 73 63 6f 70 65 3c 2f 62  t><p><b>scope</b
1b70: 3e 3c 64 64 3e 0a 28 48 49 44 44 45 4e 29 20 20  ><dd>.(HIDDEN)  
1b80: 46 6f 72 20 61 6e 79 20 71 75 65 72 79 2c 20 74  For any query, t
1b90: 68 69 73 20 76 61 6c 75 65 20 69 73 20 74 68 65  his value is the
1ba0: 20 73 61 6d 65 20 6f 6e 20 61 6c 6c 0a 72 6f 77   same on all.row
1bb0: 73 2e 20 20 54 68 65 20 73 63 6f 70 65 20 69 73  s.  The scope is
1bc0: 20 61 20 6d 65 61 73 75 72 65 20 6f 66 20 68 6f   a measure of ho
1bd0: 77 20 77 69 64 65 6c 79 20 74 68 65 20 76 69 72  w widely the vir
1be0: 74 75 61 6c 0a 74 61 62 6c 65 20 6c 6f 6f 6b 73  tual.table looks
1bf0: 20 66 6f 72 20 6d 61 74 63 68 69 6e 67 20 77 6f   for matching wo
1c00: 72 64 73 2e 20 20 53 6d 61 6c 6c 65 72 20 76 61  rds.  Smaller va
1c10: 6c 75 65 73 20 6f 66 0a 73 63 6f 70 65 20 63 61  lues of.scope ca
1c20: 75 73 65 20 61 20 62 72 6f 61 64 65 72 20 73 65  use a broader se
1c30: 61 72 63 68 2e 20 20 54 68 65 20 73 63 6f 70 65  arch.  The scope
1c40: 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 0a 63 68 6f   is normally.cho
1c50: 73 65 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  sen automaticall
1c60: 79 20 61 6e 64 20 69 73 20 63 61 70 70 65 64 20  y and is capped 
1c70: 61 74 20 34 2e 20 20 41 70 70 6c 69 63 61 74 69  at 4.  Applicati
1c80: 6f 6e 73 0a 63 61 6e 20 63 68 61 6e 67 65 20 74  ons.can change t
1c90: 68 65 20 73 63 6f 70 65 20 62 79 20 69 6e 63 6c  he scope by incl
1ca0: 75 64 69 6e 67 20 61 20 74 65 72 6d 20 6f 66 20  uding a term of 
1cb0: 74 68 65 20 66 6f 72 6d 0a 22 73 63 6f 70 65 3d  the form."scope=
1cc0: 4e 22 20 69 6e 20 74 68 65 20 57 48 45 52 45 20  N" in the WHERE 
1cd0: 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 71 75  clause of the qu
1ce0: 65 72 79 2e 20 20 49 6e 63 72 65 61 73 69 6e 67  ery.  Increasing
1cf0: 0a 74 68 65 20 73 63 6f 70 65 20 77 69 6c 6c 20  .the scope will 
1d00: 6d 61 6b 65 20 74 68 65 20 71 75 65 72 79 20 72  make the query r
1d10: 75 6e 20 66 61 73 74 65 72 2c 20 62 75 74 20 77  un faster, but w
1d20: 69 6c 6c 20 72 65 64 75 63 65 0a 74 68 65 20 70  ill reduce.the p
1d30: 6f 73 73 69 62 6c 65 20 63 6f 72 72 65 63 74 69  ossible correcti
1d40: 6f 6e 73 2e 0a 0a 3c 64 74 3e 3c 70 3e 3c 62 3e  ons...<dt><p><b>
1d50: 73 72 63 68 63 6e 74 3c 2f 62 3e 3c 64 64 3e 0a  srchcnt</b><dd>.
1d60: 28 48 49 44 44 45 4e 29 20 20 46 6f 72 20 61 6e  (HIDDEN)  For an
1d70: 79 20 71 75 65 72 79 2c 20 74 68 69 73 20 76 61  y query, this va
1d80: 6c 75 65 20 69 73 20 74 68 65 20 73 61 6d 65 20  lue is the same 
1d90: 6f 6e 20 61 6c 6c 0a 72 6f 77 73 2e 20 20 54 68  on all.rows.  Th
1da0: 69 73 20 76 61 6c 75 65 20 69 73 20 61 6e 20 69  is value is an i
1db0: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
1dc0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 77 6f  the number of.wo
1dd0: 72 64 73 20 65 78 61 6d 69 6e 65 64 20 75 73 69  rds examined usi
1de0: 6e 67 20 74 68 65 20 65 64 69 74 2d 64 69 73 74  ng the edit-dist
1df0: 61 6e 63 65 20 61 6c 67 6f 72 69 74 68 6d 20 74  ance algorithm t
1e00: 6f 0a 66 69 6e 64 20 74 68 65 20 74 6f 70 20 6d  o.find the top m
1e10: 61 74 63 68 65 73 20 74 68 61 74 20 61 72 65 20  atches that are 
1e20: 75 6c 74 69 6d 61 74 65 6c 79 20 64 69 73 70 6c  ultimately displ
1e30: 61 79 65 64 2e 20 20 54 68 69 73 0a 76 61 6c 75  ayed.  This.valu
1e40: 65 20 69 73 20 66 6f 72 20 64 69 61 67 6e 6f 73  e is for diagnos
1e50: 74 69 63 20 75 73 65 20 6f 6e 6c 79 2e 0a 0a 3c  tic use only...<
1e60: 64 74 3e 3c 70 3e 3c 62 3e 73 6f 75 6e 64 73 6c  dt><p><b>soundsl
1e70: 69 6b 65 3c 2f 62 3e 3c 64 64 3e 0a 28 48 49 44  ike</b><dd>.(HID
1e80: 44 45 4e 29 20 20 57 68 65 6e 20 69 6e 73 65 72  DEN)  When inser
1e90: 74 69 6e 67 20 76 6f 63 61 62 75 6c 61 72 79 20  ting vocabulary 
1ea0: 65 6e 74 72 69 65 73 2c 20 74 68 69 73 20 66 69  entries, this fi
1eb0: 65 6c 64 0a 63 61 6e 20 62 65 20 73 65 74 20 74  eld.can be set t
1ec0: 6f 20 61 20 73 70 65 6c 6c 69 6e 67 20 74 68 61  o a spelling tha
1ed0: 74 20 6d 61 74 63 68 65 73 20 77 68 61 74 20 74  t matches what t
1ee0: 68 65 20 77 6f 72 64 0a 73 6f 75 6e 64 73 20 6c  he word.sounds l
1ef0: 69 6b 65 2e 20 20 53 65 65 20 74 68 65 20 44 45  ike.  See the DE
1f00: 41 4c 49 4e 47 20 57 49 54 48 20 55 4e 55 53 55  ALING WITH UNUSU
1f10: 41 4c 20 41 4e 44 20 44 49 46 46 49 43 55 4c 54  AL AND DIFFICULT
1f20: 0a 53 50 45 4c 4c 49 4e 47 53 20 73 65 63 74 69  .SPELLINGS secti
1f30: 6f 6e 20 62 65 6c 6f 77 20 66 6f 72 20 64 65 74  on below for det
1f40: 61 69 6c 73 2e 0a 0a 3c 64 74 3e 3c 70 3e 3c 62  ails...<dt><p><b
1f50: 3e 63 6f 6d 6d 61 6e 64 3c 2f 62 3e 3c 64 64 3e  >command</b><dd>
1f60: 0a 28 48 49 44 44 45 4e 29 20 20 54 68 65 20 76  .(HIDDEN)  The v
1f70: 61 6c 75 65 20 6f 66 20 74 68 65 20 22 63 6f 6d  alue of the "com
1f80: 6d 61 6e 64 22 20 63 6f 6c 75 6d 6e 20 69 73 20  mand" column is 
1f90: 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 20 20 48 6f  always NULL.  Ho
1fa0: 77 65 76 65 72 2c 0a 61 70 70 6c 69 63 61 74 69  wever,.applicati
1fb0: 6f 6e 73 20 63 61 6e 20 69 6e 73 65 72 74 20 73  ons can insert s
1fc0: 70 65 63 69 61 6c 20 73 74 72 69 6e 67 73 20 69  pecial strings i
1fd0: 6e 74 6f 20 74 68 65 20 22 63 6f 6d 6d 61 6e 64  nto the "command
1fe0: 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 6f 72 64 65  " column in orde
1ff0: 72 0a 74 6f 20 70 72 6f 76 6f 6b 65 20 63 65 72  r.to provoke cer
2000: 74 61 69 6e 20 62 65 68 61 76 69 6f 72 73 20 69  tain behaviors i
2010: 6e 20 74 68 65 20 73 70 65 6c 6c 66 69 78 31 20  n the spellfix1 
2020: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 46  virtual table..F
2030: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 65  or example, inse
2040: 72 74 69 6e 67 20 74 68 65 20 73 74 72 69 6e 67  rting the string
2050: 20 27 72 65 73 65 74 27 20 69 6e 74 6f 20 74 68   'reset' into th
2060: 65 20 22 63 6f 6d 6d 61 6e 64 22 20 63 6f 6c 75  e "command" colu
2070: 6d 6e 0a 77 69 6c 6c 20 63 61 75 73 65 20 74 68  mn.will cause th
2080: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
2090: 74 6f 20 72 65 72 65 61 64 20 69 74 73 20 65 64  to reread its ed
20a0: 69 74 20 64 69 73 74 61 6e 63 65 20 77 65 69 67  it distance weig
20b0: 68 74 73 0a 28 69 66 20 74 68 65 72 65 20 61 72  hts.(if there ar
20c0: 65 20 61 6e 79 29 2e 0a 3c 2f 64 6c 3e 0a 0a 3c  e any)..</dl>..<
20d0: 68 31 3e 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 31  h1>Algorithm</h1
20e0: 3e 0a 0a 3c 70 3e 54 68 65 20 73 70 65 6c 6c 66  >..<p>The spellf
20f0: 69 78 31 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ix1 virtual tabl
2100: 65 20 63 72 65 61 74 65 73 20 61 20 73 69 6e 67  e creates a sing
2110: 6c 65 0a 73 68 61 64 6f 77 20 74 61 62 6c 65 20  le.shadow table 
2120: 6e 61 6d 65 64 20 22 25 5f 76 6f 63 61 62 22 20  named "%_vocab" 
2130: 28 77 68 65 72 65 20 74 68 65 20 25 20 69 73 20  (where the % is 
2140: 72 65 70 6c 61 63 65 64 20 62 79 20 74 68 65 20  replaced by the 
2150: 6e 61 6d 65 20 6f 66 0a 74 68 65 20 76 69 72 74  name of.the virt
2160: 75 61 6c 20 74 61 62 6c 65 3b 20 45 78 3a 20 22  ual table; Ex: "
2170: 64 65 6d 6f 5f 76 6f 63 61 62 22 20 66 6f 72 20  demo_vocab" for 
2180: 74 68 65 20 22 64 65 6d 6f 22 20 76 69 72 74 75  the "demo" virtu
2190: 61 6c 20 74 61 62 6c 65 29 2e 20 20 0a 74 68 65  al table).  .the
21a0: 20 73 68 61 64 6f 77 20 74 61 62 6c 65 20 63 6f   shadow table co
21b0: 6e 74 61 69 6e 73 20 74 68 65 20 66 6f 6c 6c 6f  ntains the follo
21c0: 77 69 6e 67 20 63 6f 6c 75 6d 6e 73 3a 0a 0a 3c  wing columns:..<
21d0: 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 69 64  dl>.<dt><p><b>id
21e0: 3c 2f 62 3e 3c 64 64 3e 0a 54 68 65 20 75 6e 69  </b><dd>.The uni
21f0: 71 75 65 20 69 64 20 28 49 4e 54 45 47 45 52 20  que id (INTEGER 
2200: 50 52 49 4d 41 52 59 20 4b 45 59 29 0a 0a 3c 64  PRIMARY KEY)..<d
2210: 74 3e 3c 70 3e 3c 62 3e 72 61 6e 6b 3c 2f 62 3e  t><p><b>rank</b>
2220: 3c 64 64 3e 0a 54 68 65 20 72 61 6e 6b 20 6f 66  <dd>.The rank of
2230: 20 77 6f 72 64 2e 0a 0a 3c 64 74 3e 3c 70 3e 3c   word...<dt><p><
2240: 62 3e 6c 61 6e 67 69 64 3c 2f 62 3e 3c 64 64 3e  b>langid</b><dd>
2250: 0a 54 68 65 20 6c 61 6e 67 75 61 67 65 20 69 64  .The language id
2260: 20 66 6f 72 20 74 68 69 73 20 65 6e 74 72 79 2e   for this entry.
2270: 0a 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 77 6f 72 64  ..<dt><p><b>word
2280: 3c 2f 62 3e 3c 64 64 3e 0a 54 68 65 20 6f 72 69  </b><dd>.The ori
2290: 67 69 6e 61 6c 20 55 54 46 38 20 74 65 78 74 20  ginal UTF8 text 
22a0: 6f 66 20 74 68 65 20 76 6f 63 61 62 75 6c 61 72  of the vocabular
22b0: 79 20 77 6f 72 64 0a 0a 3c 64 74 3e 3c 70 3e 3c  y word..<dt><p><
22c0: 62 3e 6b 31 3c 2f 62 3e 3c 64 64 3e 0a 54 68 65  b>k1</b><dd>.The
22d0: 20 77 6f 72 64 20 74 72 61 6e 73 6c 69 74 65 72   word transliter
22e0: 61 74 65 64 20 69 6e 74 6f 20 6c 6f 77 65 72 2d  ated into lower-
22f0: 63 61 73 65 20 41 53 43 49 49 2e 20 20 0a 54 68  case ASCII.  .Th
2300: 65 72 65 20 69 73 20 61 20 73 74 61 6e 64 61 72  ere is a standar
2310: 64 20 74 61 62 6c 65 20 6f 66 20 6d 61 70 70 69  d table of mappi
2320: 6e 67 73 20 66 72 6f 6d 20 6e 6f 6e 2d 41 53 43  ngs from non-ASC
2330: 49 49 0a 63 68 61 72 61 63 74 65 72 73 20 69 6e  II.characters in
2340: 74 6f 20 41 53 43 49 49 2e 20 20 45 78 61 6d 70  to ASCII.  Examp
2350: 6c 65 73 3a 20 22 c3 a6 22 20 2d 3e 20 22 61 65  les: ".." -> "ae
2360: 22 2c 0a 22 c3 be 22 20 2d 3e 20 22 74 68 22 2c  ",.".." -> "th",
2370: 20 22 c3 9f 22 20 2d 3e 20 22 73 73 22 2c 20 22   ".." -> "ss", "
2380: c3 a1 22 20 2d 3e 20 22 61 22 2c 20 2e 2e 2e 20  .." -> "a", ... 
2390: 20 54 68 65 0a 61 63 63 65 73 73 6f 72 79 20 66   The.accessory f
23a0: 75 6e 63 74 69 6f 6e 20 73 70 65 6c 6c 66 69 78  unction spellfix
23b0: 31 5f 74 72 61 6e 73 6c 69 74 28 58 29 20 77 69  1_translit(X) wi
23c0: 6c 6c 20 64 6f 0a 74 68 65 20 6e 6f 6e 2d 41 53  ll do.the non-AS
23d0: 43 49 49 20 74 6f 20 41 53 43 49 49 20 6d 61 70  CII to ASCII map
23e0: 70 69 6e 67 2e 20 20 54 68 65 20 62 75 69 6c 74  ping.  The built
23f0: 2d 69 6e 20 6c 6f 77 65 72 28 58 29 0a 66 75 6e  -in lower(X).fun
2400: 63 74 69 6f 6e 20 77 69 6c 6c 20 63 6f 6e 76 65  ction will conve
2410: 72 74 20 74 6f 20 6c 6f 77 65 72 2d 63 61 73 65  rt to lower-case
2420: 2e 20 20 54 68 75 73 3a 0a 6b 31 20 3d 20 6c 6f  .  Thus:.k1 = lo
2430: 77 65 72 28 73 70 65 6c 6c 66 69 78 31 5f 74 72  wer(spellfix1_tr
2440: 61 6e 73 6c 69 74 28 77 6f 72 64 29 29 2e 0a 0a  anslit(word))...
2450: 49 66 20 74 68 65 20 77 6f 72 64 20 69 73 20 61  If the word is a
2460: 6c 72 65 61 64 79 20 61 6c 6c 20 6c 6f 77 65 72  lready all lower
2470: 2d 63 61 73 65 20 41 53 43 49 49 2c 20 74 68 65  -case ASCII, the
2480: 6e 20 74 68 65 20 6b 31 20 63 6f 6c 75 6d 6e 0a  n the k1 column.
2490: 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 61 20 4e  will contain a N
24a0: 55 4c 4c 2e 20 20 54 68 69 73 20 72 65 64 75 63  ULL.  This reduc
24b0: 65 73 20 74 68 65 20 73 74 6f 72 61 67 65 20 72  es the storage r
24c0: 65 71 75 69 72 65 6d 65 6e 74 73 20 66 6f 72 0a  equirements for.
24d0: 74 68 65 20 25 5f 76 6f 63 61 62 20 74 61 62 6c  the %_vocab tabl
24e0: 65 20 61 6e 64 20 68 65 6c 70 73 20 73 70 65 6c  e and helps spel
24f0: 6c 66 69 78 20 74 6f 20 72 75 6e 20 61 20 6c 69  lfix to run a li
2500: 74 74 6c 65 20 66 61 73 74 65 72 2e 0a 54 68 65  ttle faster..The
2510: 72 65 66 6f 72 65 2c 20 69 74 20 69 73 20 61 64  refore, it is ad
2520: 76 61 6e 74 61 67 65 6f 75 73 20 74 6f 20 70 6f  vantageous to po
2530: 70 75 6c 61 74 65 20 61 73 20 6d 75 63 68 20 6f  pulate as much o
2540: 66 20 74 68 65 20 73 70 65 6c 6c 66 69 78 0a 74  f the spellfix.t
2550: 61 62 6c 65 20 61 73 20 70 6f 73 73 69 62 6c 65  able as possible
2560: 20 75 73 69 6e 67 20 6c 6f 77 65 72 2d 63 61 73   using lower-cas
2570: 65 20 41 53 43 49 49 20 76 6f 63 61 62 75 6c 61  e ASCII vocabula
2580: 72 79 2e 0a 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 6b  ry...<dt><p><b>k
2590: 32 3c 2f 62 3e 3c 64 64 3e 0a 54 68 69 73 20 66  2</b><dd>.This f
25a0: 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 70 68 6f  ield holds a pho
25b0: 6e 65 74 69 63 20 63 6f 64 65 20 64 65 72 69 76  netic code deriv
25c0: 65 64 20 66 72 6f 6d 20 63 6f 61 6c 65 73 63 65  ed from coalesce
25d0: 28 6b 31 2c 77 6f 72 64 29 2e 0a 4c 65 74 74 65  (k1,word)..Lette
25e0: 72 73 20 74 68 61 74 20 68 61 76 65 20 73 69 6d  rs that have sim
25f0: 69 6c 61 72 20 73 6f 75 6e 64 73 20 61 72 65 20  ilar sounds are 
2600: 6d 61 70 70 65 64 20 69 6e 74 6f 20 74 68 65 20  mapped into the 
2610: 73 61 6d 65 20 73 79 6d 62 6f 6c 2e 0a 46 6f 72  same symbol..For
2620: 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 76 6f   example, all vo
2630: 77 65 6c 73 20 61 6e 64 20 76 6f 77 65 6c 20 63  wels and vowel c
2640: 6c 75 73 74 65 72 73 20 62 65 63 6f 6d 65 20 74  lusters become t
2650: 68 65 0a 73 69 6e 67 6c 65 20 73 79 6d 62 6f 6c  he.single symbol
2660: 20 22 41 22 2e 20 20 41 6e 64 20 74 68 65 20 6c   "A".  And the l
2670: 65 74 74 65 72 73 20 22 70 22 2c 20 22 62 22 2c  etters "p", "b",
2680: 20 22 66 22 2c 20 61 6e 64 0a 22 76 22 20 61 6c   "f", and."v" al
2690: 6c 20 62 65 63 6f 6d 65 20 22 42 22 2e 20 20 41  l become "B".  A
26a0: 6c 6c 20 6e 61 73 61 6c 20 73 6f 75 6e 64 73 20  ll nasal sounds 
26b0: 61 72 65 20 72 65 70 72 65 73 65 6e 74 65 64 0a  are represented.
26c0: 61 73 20 22 4e 22 2e 20 20 41 6e 64 20 73 6f 20  as "N".  And so 
26d0: 66 6f 72 74 68 2e 20 20 54 68 65 20 6d 61 70 70  forth.  The mapp
26e0: 69 6e 67 20 69 73 20 62 61 73 65 64 20 6f 6e 0a  ing is based on.
26f0: 69 64 65 61 73 20 66 6f 75 6e 64 20 69 6e 20 53  ideas found in S
2700: 6f 75 6e 64 65 78 2c 20 4d 65 74 61 70 68 6f 6e  oundex, Metaphon
2710: 65 2c 20 61 6e 64 20 6f 74 68 65 72 0a 6c 6f 6e  e, and other.lon
2720: 67 2d 73 74 61 6e 64 69 6e 67 20 70 68 6f 6e 65  g-standing phone
2730: 74 69 63 20 6d 61 74 63 68 69 6e 67 20 73 79 73  tic matching sys
2740: 74 65 6d 73 2e 20 20 54 68 69 73 20 6b 65 79 20  tems.  This key 
2750: 63 61 6e 0a 62 65 20 67 65 6e 65 72 61 74 65 64  can.be generated
2760: 20 62 79 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   by the function
2770: 20 73 70 65 6c 6c 66 69 78 31 5f 70 68 6f 6e 65   spellfix1_phone
2780: 68 61 73 68 28 58 29 2e 20 20 0a 48 65 6e 63 65  hash(X).  .Hence
2790: 3a 20 6b 32 20 3d 20 73 70 65 6c 6c 66 69 78 31  : k2 = spellfix1
27a0: 5f 70 68 6f 6e 65 68 61 73 68 28 63 6f 61 6c 65  _phonehash(coale
27b0: 73 63 65 28 6b 31 2c 77 6f 72 64 29 29 0a 3c 2f  sce(k1,word)).</
27c0: 64 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 69 73  dl>..<p>There is
27d0: 20 61 6c 73 6f 20 61 20 66 75 6e 63 74 69 6f 6e   also a function
27e0: 20 66 6f 72 20 63 6f 6d 70 75 74 69 6e 67 20 74   for computing t
27f0: 68 65 20 57 61 67 6e 65 72 20 65 64 69 74 20 64  he Wagner edit d
2800: 69 73 74 61 6e 63 65 20 6f 72 20 74 68 65 0a 4c  istance or the.L
2810: 65 76 65 6e 73 68 74 65 69 6e 20 64 69 73 74 61  evenshtein dista
2820: 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 70 61  nce between a pa
2830: 74 74 65 72 6e 20 61 6e 64 20 61 20 77 6f 72 64  ttern and a word
2840: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
2850: 0a 69 73 20 65 78 70 6f 73 65 64 20 61 73 20 73  .is exposed as s
2860: 70 65 6c 6c 66 69 78 31 5f 65 64 69 74 64 69 73  pellfix1_editdis
2870: 74 28 58 2c 59 29 2e 20 20 54 68 65 20 65 64 69  t(X,Y).  The edi
2880: 74 20 64 69 73 74 61 6e 63 65 20 66 75 6e 63 74  t distance funct
2890: 69 6f 6e 0a 72 65 74 75 72 6e 73 20 74 68 65 20  ion.returns the 
28a0: 22 63 6f 73 74 22 20 6f 66 20 63 6f 6e 76 65 72  "cost" of conver
28b0: 74 69 6e 67 20 58 20 69 6e 74 6f 20 59 2e 20 20  ting X into Y.  
28c0: 53 6f 6d 65 20 74 72 61 6e 73 66 6f 72 6d 61 74  Some transformat
28d0: 69 6f 6e 73 0a 63 6f 73 74 20 6d 6f 72 65 20 74  ions.cost more t
28e0: 68 61 6e 20 6f 74 68 65 72 73 2e 20 20 43 68 61  han others.  Cha
28f0: 6e 67 69 6e 67 20 6f 6e 65 20 76 6f 77 65 6c 20  nging one vowel 
2900: 69 6e 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74  into a different
2910: 20 76 6f 77 65 6c 2c 0a 66 6f 72 20 65 78 61 6d   vowel,.for exam
2920: 70 6c 65 20 69 73 20 72 65 6c 61 74 69 76 65 6c  ple is relativel
2930: 79 20 63 68 65 61 70 2c 20 61 73 20 69 73 20 64  y cheap, as is d
2940: 6f 75 62 6c 69 6e 67 20 61 20 63 6f 6e 73 74 61  oubling a consta
2950: 6e 74 2c 20 6f 72 0a 6f 6d 69 74 74 69 6e 67 20  nt, or.omitting 
2960: 74 68 65 20 73 65 63 6f 6e 64 20 63 68 61 72 61  the second chara
2970: 63 74 65 72 20 6f 66 20 61 20 64 6f 75 62 6c 65  cter of a double
2980: 2d 63 6f 6e 73 74 61 6e 74 2e 20 20 4f 74 68 65  -constant.  Othe
2990: 72 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  r transformation
29a0: 73 0a 6f 72 20 6d 6f 72 65 20 65 78 70 65 6e 73  s.or more expens
29b0: 69 76 65 2e 20 20 54 68 65 20 69 64 65 61 20 69  ive.  The idea i
29c0: 73 20 74 68 61 74 20 74 68 65 20 65 64 69 74 20  s that the edit 
29d0: 64 69 73 74 61 6e 63 65 20 66 75 6e 63 74 69 6f  distance functio
29e0: 6e 20 72 65 74 75 72 6e 73 0a 61 20 6c 6f 77 20  n returns.a low 
29f0: 63 6f 73 74 20 66 6f 72 20 77 6f 72 64 73 20 74  cost for words t
2a00: 68 61 74 20 61 72 65 20 73 69 6d 69 6c 61 72 20  hat are similar 
2a10: 61 6e 64 20 61 20 68 69 67 68 65 72 20 63 6f 73  and a higher cos
2a20: 74 20 66 6f 72 20 77 6f 72 64 73 0a 74 68 61 74  t for words.that
2a30: 20 61 72 65 20 66 75 72 74 68 65 72 20 61 70 61   are further apa
2a40: 72 74 2e 20 20 49 6e 20 74 68 69 73 20 69 6d 70  rt.  In this imp
2a50: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
2a60: 20 6d 61 78 69 6d 75 6d 20 63 6f 73 74 0a 6f 66   maximum cost.of
2a70: 20 61 6e 79 20 73 69 6e 67 6c 65 2d 63 68 61 72   any single-char
2a80: 61 63 74 65 72 20 65 64 69 74 20 28 64 65 6c 65  acter edit (dele
2a90: 74 65 2c 20 69 6e 73 65 72 74 2c 20 6f 72 20 73  te, insert, or s
2aa0: 75 62 73 74 69 74 75 74 65 29 20 69 73 20 31 30  ubstitute) is 10
2ab0: 30 2c 0a 77 69 74 68 20 6c 6f 77 65 72 20 63 6f  0,.with lower co
2ac0: 73 74 73 20 66 6f 72 20 73 6f 6d 65 20 65 64 69  sts for some edi
2ad0: 74 73 20 28 73 75 63 68 20 61 73 20 74 72 61 6e  ts (such as tran
2ae0: 73 66 6f 72 6d 69 6e 67 20 76 6f 77 65 6c 73 29  sforming vowels)
2af0: 2e 0a 0a 3c 70 3e 54 68 65 20 22 73 63 6f 72 65  ...<p>The "score
2b00: 22 20 66 6f 72 20 61 20 63 6f 6d 70 61 72 69 73  " for a comparis
2b10: 6f 6e 20 69 73 20 74 68 65 20 65 64 69 74 20 64  on is the edit d
2b20: 69 73 74 61 6e 63 65 20 62 65 74 77 65 65 6e 20  istance between 
2b30: 74 68 65 20 70 61 74 74 65 72 6e 0a 61 6e 64 20  the pattern.and 
2b40: 74 68 65 20 77 6f 72 64 2c 20 61 64 6a 75 73 74  the word, adjust
2b50: 65 64 20 64 6f 77 6e 20 62 79 20 74 68 65 20 62  ed down by the b
2b60: 61 73 65 2d 32 20 6c 6f 67 61 72 69 74 68 6d 20  ase-2 logarithm 
2b70: 6f 66 20 74 68 65 20 77 6f 72 64 20 72 61 6e 6b  of the word rank
2b80: 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61  ..For example, a
2b90: 20 6d 61 74 63 68 20 77 69 74 68 20 64 69 73 74   match with dist
2ba0: 61 6e 63 65 20 31 30 30 20 62 75 74 20 72 61 6e  ance 100 but ran
2bb0: 6b 20 31 30 30 30 20 77 6f 75 6c 64 20 68 61 76  k 1000 would hav
2bc0: 65 20 61 0a 73 63 6f 72 65 20 6f 66 20 31 32 32  e a.score of 122
2bd0: 20 28 3d 20 31 30 30 20 2d 20 6c 6f 67 32 28 31   (= 100 - log2(1
2be0: 30 30 30 29 20 2b 20 33 32 29 20 77 68 65 72 65  000) + 32) where
2bf0: 61 73 20 61 20 6d 61 74 63 68 20 77 69 74 68 20  as a match with 
2c00: 64 69 73 74 61 6e 63 65 0a 31 30 30 20 77 69 74  distance.100 wit
2c10: 68 20 61 20 72 61 6e 6b 20 6f 66 20 31 20 77 6f  h a rank of 1 wo
2c20: 75 6c 64 20 68 61 76 65 20 61 20 73 63 6f 72 65  uld have a score
2c30: 20 6f 66 20 31 33 31 20 28 31 30 30 20 2d 20 6c   of 131 (100 - l
2c40: 6f 67 32 28 31 29 20 2b 20 33 32 29 2e 0a 28 4e  og2(1) + 32)..(N
2c50: 42 3a 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74  B:  The constant
2c60: 20 33 32 20 69 73 20 61 64 64 65 64 20 74 6f 20   32 is added to 
2c70: 65 61 63 68 20 73 63 6f 72 65 20 74 6f 20 6b 65  each score to ke
2c80: 65 70 20 69 74 20 66 72 6f 6d 20 67 6f 69 6e 67  ep it from going
2c90: 0a 6e 65 67 61 74 69 76 65 20 69 6e 20 63 61 73  .negative in cas
2ca0: 65 20 74 68 65 20 65 64 69 74 20 64 69 73 74 61  e the edit dista
2cb0: 6e 63 65 20 69 73 20 7a 65 72 6f 2e 29 20 20 49  nce is zero.)  I
2cc0: 6e 20 74 68 69 73 20 77 61 79 2c 20 66 72 65 71  n this way, freq
2cd0: 75 65 6e 74 6c 79 0a 75 73 65 64 20 77 6f 72 64  uently.used word
2ce0: 73 20 67 65 74 20 61 20 73 6c 69 67 68 74 6c 79  s get a slightly
2cf0: 20 6c 6f 77 65 72 20 63 6f 73 74 20 77 68 69 63   lower cost whic
2d00: 68 20 74 65 6e 64 73 20 74 6f 20 6d 6f 76 65 20  h tends to move 
2d10: 74 68 65 6d 20 74 6f 77 61 72 64 0a 74 68 65 20  them toward.the 
2d20: 74 6f 70 20 6f 66 20 74 68 65 20 6c 69 73 74 20  top of the list 
2d30: 6f 66 20 61 6c 74 65 72 6e 61 74 69 76 65 20 73  of alternative s
2d40: 70 65 6c 6c 69 6e 67 73 2e 0a 0a 3c 70 3e 41 20  pellings...<p>A 
2d50: 73 74 72 61 69 67 68 74 66 6f 72 77 61 72 64 20  straightforward 
2d60: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
2d70: 66 20 61 20 73 70 65 6c 6c 69 6e 67 20 63 6f 72  f a spelling cor
2d80: 72 65 63 74 6f 72 20 77 6f 75 6c 64 20 62 65 0a  rector would be.
2d90: 74 6f 20 63 6f 6d 70 61 72 65 20 74 68 65 20 73  to compare the s
2da0: 65 61 72 63 68 20 74 65 72 6d 20 61 67 61 69 6e  earch term again
2db0: 73 74 20 65 76 65 72 79 20 77 6f 72 64 20 69 6e  st every word in
2dc0: 20 74 68 65 20 76 6f 63 61 62 75 6c 61 72 79 0a   the vocabulary.
2dd0: 61 6e 64 20 73 65 6c 65 63 74 20 74 68 65 20 32  and select the 2
2de0: 30 20 77 69 74 68 20 74 68 65 20 6c 6f 77 65 73  0 with the lowes
2df0: 74 20 73 63 6f 72 65 73 2e 20 20 48 6f 77 65 76  t scores.  Howev
2e00: 65 72 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 0a  er, there will .
2e10: 74 79 70 69 63 61 6c 6c 79 20 62 65 20 68 75 6e  typically be hun
2e20: 64 72 65 64 73 20 6f 66 20 74 68 6f 75 73 61 6e  dreds of thousan
2e30: 64 73 20 6f 72 20 6d 69 6c 6c 69 6f 6e 73 20 6f  ds or millions o
2e40: 66 20 77 6f 72 64 73 20 69 6e 20 74 68 65 0a 76  f words in the.v
2e50: 6f 63 61 62 75 6c 61 72 79 2c 20 61 6e 64 20 73  ocabulary, and s
2e60: 6f 20 74 68 69 73 20 61 70 70 72 6f 61 63 68 20  o this approach 
2e70: 69 73 20 6e 6f 74 20 66 61 73 74 20 65 6e 6f 75  is not fast enou
2e80: 67 68 2e 0a 0a 3c 70 3e 53 75 70 70 6f 73 65 20  gh...<p>Suppose 
2e90: 74 68 65 20 74 65 72 6d 20 74 68 61 74 20 69 73  the term that is
2ea0: 20 62 65 69 6e 67 20 73 70 65 6c 6c 2d 63 6f 72   being spell-cor
2eb0: 72 65 63 74 65 64 20 69 73 20 58 2e 20 20 54 6f  rected is X.  To
2ec0: 20 6c 69 6d 69 74 0a 74 68 65 20 73 65 61 72 63   limit.the searc
2ed0: 68 20 73 70 61 63 65 2c 20 58 20 69 73 20 63 6f  h space, X is co
2ee0: 6e 76 65 72 74 65 64 20 74 6f 20 61 20 6b 32 2d  nverted to a k2-
2ef0: 6c 69 6b 65 20 6b 65 79 20 75 73 69 6e 67 20 74  like key using t
2f00: 68 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  he.equivalent of
2f10: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
2f20: 70 72 65 3e 0a 20 20 20 6b 65 79 20 3d 20 73 70  pre>.   key = sp
2f30: 65 6c 6c 66 69 78 31 5f 70 68 6f 6e 65 68 61 73  ellfix1_phonehas
2f40: 68 28 6c 6f 77 65 72 28 73 70 65 6c 6c 66 69 78  h(lower(spellfix
2f50: 31 5f 74 72 61 6e 73 6c 69 74 28 58 29 29 29 0a  1_translit(X))).
2f60: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
2f70: 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 6b 65 79  te>..<p>This key
2f80: 20 69 73 20 74 68 65 6e 20 6c 69 6d 69 74 65 64   is then limited
2f90: 20 74 6f 20 22 73 63 6f 70 65 22 20 63 68 61 72   to "scope" char
2fa0: 61 63 74 65 72 73 2e 20 20 54 68 65 20 64 65 66  acters.  The def
2fb0: 61 75 6c 74 20 73 63 6f 70 65 0a 76 61 6c 75 65  ault scope.value
2fc0: 20 69 73 20 34 2c 20 62 75 74 20 61 6e 20 61 6c   is 4, but an al
2fd0: 74 65 72 6e 61 74 69 76 65 20 73 63 6f 70 65 20  ternative scope 
2fe0: 63 61 6e 20 62 65 20 73 70 65 63 69 66 69 65 64  can be specified
2ff0: 20 75 73 69 6e 67 20 74 68 65 0a 22 73 63 6f 70   using the."scop
3000: 65 3d 4e 22 20 74 65 72 6d 20 69 6e 20 74 68 65  e=N" term in the
3010: 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20 20   WHERE clause.  
3020: 41 66 74 65 72 20 74 68 65 20 6b 65 79 20 68 61  After the key ha
3030: 73 20 62 65 65 6e 20 74 72 75 6e 63 61 74 65 64  s been truncated
3040: 2c 0a 74 68 65 20 65 64 69 74 20 64 69 73 74 61  ,.the edit dista
3050: 6e 63 65 20 69 73 20 72 75 6e 20 61 67 61 69 6e  nce is run again
3060: 73 74 20 65 76 65 72 79 20 74 65 72 6d 20 69 6e  st every term in
3070: 20 74 68 65 20 76 6f 63 61 62 75 6c 61 72 79 20   the vocabulary 
3080: 74 68 61 74 0a 68 61 73 20 61 20 6b 32 20 76 61  that.has a k2 va
3090: 6c 75 65 20 74 68 61 74 20 62 65 67 69 6e 73 20  lue that begins 
30a0: 77 69 74 68 20 74 68 65 20 61 62 62 72 65 76 69  with the abbrevi
30b0: 61 74 65 64 20 6b 65 79 2e 0a 0a 3c 70 3e 46 6f  ated key...<p>Fo
30c0: 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
30d0: 73 65 20 74 68 65 20 69 6e 70 75 74 20 77 6f 72  se the input wor
30e0: 64 20 69 73 20 22 50 61 73 6b 61 67 75 6c 61 22  d is "Paskagula"
30f0: 2e 20 20 54 68 65 20 70 68 6f 6e 65 74 69 63 20  .  The phonetic 
3100: 0a 6b 65 79 20 69 73 20 22 42 41 43 41 43 41 4c  .key is "BACACAL
3110: 41 22 20 77 68 69 63 68 20 69 73 20 74 68 65 6e  A" which is then
3120: 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20 34 20   truncated to 4 
3130: 63 68 61 72 61 63 74 65 72 73 20 22 42 41 43 41  characters "BACA
3140: 22 2e 0a 54 68 65 20 65 64 69 74 20 64 69 73 74  "..The edit dist
3150: 61 6e 63 65 20 69 73 20 74 68 65 6e 20 72 75 6e  ance is then run
3160: 20 6f 6e 20 74 68 65 20 34 39 38 30 20 65 6e 74   on the 4980 ent
3170: 72 69 65 73 20 28 6f 75 74 20 6f 66 0a 32 37 32  ries (out of.272
3180: 2c 35 39 37 20 65 6e 74 72 69 65 73 20 74 6f 74  ,597 entries tot
3190: 61 6c 29 20 6f 66 20 74 68 65 20 76 6f 63 61 62  al) of the vocab
31a0: 75 6c 61 72 79 20 77 68 6f 73 65 20 6b 32 20 76  ulary whose k2 v
31b0: 61 6c 75 65 73 20 62 65 67 69 6e 20 77 69 74 68  alues begin with
31c0: 0a 42 41 43 41 2c 20 79 69 65 6c 64 69 6e 67 20  .BACA, yielding 
31d0: 22 50 61 73 63 61 67 6f 75 6c 61 22 20 61 73 20  "Pascagoula" as 
31e0: 74 68 65 20 62 65 73 74 20 6d 61 74 63 68 2e 0a  the best match..
31f0: 0a 3c 70 3e 4f 6e 6c 79 20 74 65 72 6d 73 20 6f  .<p>Only terms o
3200: 66 20 74 68 65 20 76 6f 63 61 62 75 6c 61 72 79  f the vocabulary
3210: 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67   with a matching
3220: 20 6c 61 6e 67 69 64 20 61 72 65 20 73 65 61 72   langid are sear
3230: 63 68 65 64 2e 0a 48 65 6e 63 65 2c 20 74 68 65  ched..Hence, the
3240: 20 73 61 6d 65 20 74 61 62 6c 65 20 63 61 6e 20   same table can 
3250: 63 6f 6e 74 61 69 6e 20 65 6e 74 72 69 65 73 20  contain entries 
3260: 66 72 6f 6d 20 6d 75 6c 74 69 70 6c 65 20 6c 61  from multiple la
3270: 6e 67 75 61 67 65 73 0a 61 6e 64 20 6f 6e 6c 79  nguages.and only
3280: 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 6c   the requested l
3290: 61 6e 67 75 61 67 65 20 77 69 6c 6c 20 62 65 20  anguage will be 
32a0: 75 73 65 64 2e 20 20 54 68 65 20 64 65 66 61 75  used.  The defau
32b0: 6c 74 20 6c 61 6e 67 69 64 0a 69 73 20 30 2e 0a  lt langid.is 0..
32c0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
32d0: 74 20 63 6f 6e 66 69 67 65 64 69 74 64 69 73 74  t configeditdist
32e0: 20 7b 63 6f 6e 66 69 67 75 72 61 62 6c 65 20 65   {configurable e
32f0: 64 69 74 20 64 69 73 74 61 6e 63 65 73 7d 3c 2f  dit distances}</
3300: 74 63 6c 3e 0a 3c 68 31 3e 43 6f 6e 66 69 67 75  tcl>.<h1>Configu
3310: 72 61 62 6c 65 20 45 64 69 74 20 44 69 73 74 61  rable Edit Dista
3320: 6e 63 65 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  nce</h1>..<p>The
3330: 20 62 75 69 6c 74 2d 69 6e 20 57 61 67 6e 65 72   built-in Wagner
3340: 20 65 64 69 74 2d 64 69 73 74 61 6e 63 65 20 66   edit-distance f
3350: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 66 69 78  unction with fix
3360: 65 64 20 77 65 69 67 68 74 73 20 63 61 6e 20 62  ed weights can b
3370: 65 0a 72 65 70 6c 61 63 65 64 20 62 79 20 74 68  e.replaced by th
3380: 65 20 5b 65 64 69 74 64 69 73 74 33 28 29 5d 20  e [editdist3()] 
3390: 65 64 69 74 2d 64 69 73 74 61 6e 63 65 20 66 75  edit-distance fu
33a0: 6e 63 74 69 6f 6e 0a 77 69 74 68 20 61 70 70 6c  nction.with appl
33b0: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
33c0: 77 65 69 67 68 74 73 20 61 6e 64 20 73 75 70 70  weights and supp
33d0: 6f 72 74 20 66 6f 72 20 75 6e 69 63 6f 64 65 2c  ort for unicode,
33e0: 20 62 79 20 73 70 65 63 69 66 79 69 6e 67 0a 74   by specifying.t
33f0: 68 65 20 22 65 64 69 74 5f 63 6f 73 74 5f 74 61  he "edit_cost_ta
3400: 62 6c 65 3d 3c 69 3e 54 41 42 4c 45 4e 41 4d 45  ble=<i>TABLENAME
3410: 3c 2f 69 3e 22 20 70 61 72 61 6d 65 74 65 72 20  </i>" parameter 
3420: 74 6f 20 74 68 65 20 73 70 65 6c 6c 66 69 78 31  to the spellfix1
3430: 20 6d 6f 64 75 6c 65 0a 77 68 65 6e 20 74 68 65   module.when the
3440: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
3450: 73 20 63 72 65 61 74 65 64 2e 0a 46 6f 72 20 65  s created..For e
3460: 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71  xample:..<blockq
3470: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
3480: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
3490: 64 65 6d 6f 32 20 55 53 49 4e 47 20 73 70 65 6c  demo2 USING spel
34a0: 6c 66 69 78 31 28 65 64 69 74 5f 63 6f 73 74 5f  lfix1(edit_cost_
34b0: 74 61 62 6c 65 3d 41 50 50 43 4f 53 54 29 3b 0a  table=APPCOST);.
34c0: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
34d0: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 5b 65 64 69  te>..<p>The [edi
34e0: 74 64 69 73 74 33 28 29 5d 20 65 64 69 74 2d 64  tdist3()] edit-d
34f0: 69 73 74 61 6e 63 65 20 66 75 6e 63 74 69 6f 6e  istance function
3500: 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 73 65 6c   can also be sel
3510: 65 63 74 65 64 20 6f 72 20 0a 64 65 73 65 6c 65  ected or .desele
3520: 63 74 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  cted at run-time
3530: 20 62 79 20 69 6e 73 65 72 74 69 6e 67 20 61 6e   by inserting an
3540: 20 61 70 70 72 6f 70 72 69 61 74 65 20 73 74 72   appropriate str
3550: 69 6e 67 20 69 6e 74 6f 20 74 68 65 0a 22 63 6f  ing into the."co
3560: 6d 6d 61 6e 64 22 20 63 6f 6c 75 6d 6e 20 6f 66  mmand" column of
3570: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
3580: 6c 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  le:</p>..<blockq
3590: 75 6f 74 65 3e 3c 70 72 65 3e 0a 49 4e 53 45 52  uote><pre>.INSER
35a0: 54 20 49 4e 54 4f 20 64 65 6d 6f 32 28 63 6f 6d  T INTO demo2(com
35b0: 6d 61 6e 64 29 20 56 41 4c 55 45 53 28 27 65 64  mand) VALUES('ed
35c0: 69 74 5f 63 6f 73 74 5f 74 61 62 6c 65 3d 41 50  it_cost_table=AP
35d0: 50 43 4f 53 54 27 29 3b 0a 3c 2f 70 72 65 3e 3c  PCOST');.</pre><
35e0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 0a 3c  /blockquote>...<
35f0: 70 3e 49 6e 20 74 68 65 20 65 78 61 6d 70 6c 65  p>In the example
3600: 73 20 61 62 6f 76 65 2c 20 74 68 65 20 41 50 50  s above, the APP
3610: 43 4f 53 54 20 74 61 62 6c 65 20 77 6f 75 6c 64  COST table would
3620: 20 62 65 20 69 6e 74 65 72 72 6f 67 61 74 65 64   be interrogated
3630: 20 74 6f 20 66 69 6e 64 0a 74 68 65 20 65 64 69   to find.the edi
3640: 74 20 64 69 73 74 61 6e 63 65 20 63 6f 65 66 66  t distance coeff
3650: 69 63 69 65 6e 74 73 2e 20 20 49 74 20 69 73 20  icients.  It is 
3660: 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20  the presence of 
3670: 74 68 65 20 22 65 64 69 74 5f 63 6f 73 74 5f 74  the "edit_cost_t
3680: 61 62 6c 65 3d 22 0a 70 61 72 61 6d 65 74 65 72  able=".parameter
3690: 20 74 6f 20 74 68 65 20 73 70 65 6c 6c 66 69 78   to the spellfix
36a0: 31 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 74 68  1 module name th
36b0: 61 74 20 63 61 75 73 65 73 20 65 64 69 74 64 69  at causes editdi
36c0: 73 74 33 28 29 20 74 6f 20 62 65 20 75 73 65 64  st3() to be used
36d0: 0a 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65  .in place of the
36e0: 20 62 75 69 6c 74 2d 69 6e 20 65 64 69 74 20 64   built-in edit d
36f0: 69 73 74 61 6e 63 65 20 66 75 6e 63 74 69 6f 6e  istance function
3700: 2e 20 20 49 66 20 41 50 50 43 4f 53 54 20 69 73  .  If APPCOST is
3710: 20 61 6e 20 65 6d 70 74 79 0a 73 74 72 69 6e 67   an empty.string
3720: 2c 20 74 68 65 6e 20 74 68 65 20 62 75 69 6c 74  , then the built
3730: 2d 69 6e 20 57 61 67 6e 65 72 20 65 64 69 74 2d  -in Wagner edit-
3740: 64 69 73 74 61 6e 63 65 20 66 75 6e 63 74 69 6f  distance functio
3750: 6e 20 69 73 20 75 73 65 64 2e 0a 0a 3c 70 3e 54  n is used...<p>T
3760: 68 65 20 65 64 69 74 20 64 69 73 74 61 6e 63 65  he edit distance
3770: 20 63 6f 65 66 66 69 63 69 65 6e 74 73 20 61 72   coefficients ar
3780: 65 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 61 64 20  e normally read 
3790: 66 72 6f 6d 20 74 68 65 20 41 50 50 43 4f 53 54  from the APPCOST
37a0: 20 74 61 62 6c 65 0a 6f 6e 63 65 20 61 6e 64 20   table.once and 
37b0: 74 68 65 72 65 20 61 66 74 65 72 20 73 74 6f 72  there after stor
37c0: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 2e 20 20 48  ed in memory.  H
37d0: 65 6e 63 65 2c 20 72 75 6e 2d 74 69 6d 65 20 63  ence, run-time c
37e0: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 0a 41 50  hanges to the.AP
37f0: 50 43 4f 53 54 20 74 61 62 6c 65 20 77 69 6c 6c  PCOST table will
3800: 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 66   not normally af
3810: 66 65 63 74 20 74 68 65 20 65 64 69 74 20 64 69  fect the edit di
3820: 73 74 61 6e 63 65 20 72 65 73 75 6c 74 73 2e 0a  stance results..
3830: 48 6f 77 65 76 65 72 2c 20 69 6e 73 65 72 74 69  However, inserti
3840: 6e 67 20 74 68 65 20 73 70 65 63 69 61 6c 20 73  ng the special s
3850: 74 72 69 6e 67 20 27 72 65 73 65 74 27 20 69 6e  tring 'reset' in
3860: 74 6f 20 74 68 65 20 22 63 6f 6d 6d 61 6e 64 22  to the "command"
3870: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 0a 76   column of the.v
3880: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 61 75  irtual table cau
3890: 73 65 73 20 74 68 65 20 65 64 69 74 20 64 69 73  ses the edit dis
38a0: 74 61 6e 63 65 20 63 6f 65 66 66 69 63 69 65 6e  tance coefficien
38b0: 74 73 20 74 6f 20 62 65 20 72 65 72 65 61 64 20  ts to be reread 
38c0: 74 68 65 0a 41 50 50 43 4f 53 54 20 74 61 62 6c  the.APPCOST tabl
38d0: 65 2e 20 20 48 65 6e 63 65 2c 20 61 70 70 6c 69  e.  Hence, appli
38e0: 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 72  cations should r
38f0: 75 6e 20 61 20 53 51 4c 20 73 74 61 74 65 6d 65  un a SQL stateme
3900: 6e 74 20 73 69 6d 69 6c 61 72 0a 74 6f 20 74 68  nt similar.to th
3910: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 77 68 65 6e  e following when
3920: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
3930: 41 50 50 43 4f 53 54 20 74 61 62 6c 65 20 6f 63  APPCOST table oc
3940: 63 75 72 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  cur:..<blockquot
3950: 65 3e 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 64  e>.INSERT INTO d
3960: 65 6d 6f 32 28 63 6f 6d 6d 61 6e 64 29 20 56 41  emo2(command) VA
3970: 4c 55 45 53 28 22 72 65 73 65 74 22 29 3b 0a 3c  LUES("reset");.<
3980: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68  /blockquote>..<h
3990: 31 3e 44 65 61 6c 69 6e 67 20 57 69 74 68 20 55  1>Dealing With U
39a0: 6e 75 73 75 61 6c 20 41 6e 64 20 44 69 66 66 69  nusual And Diffi
39b0: 63 75 6c 74 20 53 70 65 6c 6c 69 6e 67 73 3c 2f  cult Spellings</
39c0: 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 61 6c 67 6f  h1>..<p>The algo
39d0: 72 69 74 68 6d 20 61 62 6f 76 65 20 77 6f 72 6b  rithm above work
39e0: 73 20 71 75 69 74 65 20 77 65 6c 6c 20 66 6f 72  s quite well for
39f0: 20 6d 6f 73 74 20 63 61 73 65 73 2c 20 62 75 74   most cases, but
3a00: 20 74 68 65 72 65 20 61 72 65 0a 65 78 63 65 70   there are.excep
3a10: 74 69 6f 6e 73 2e 20 20 54 68 65 73 65 20 65 78  tions.  These ex
3a20: 63 65 70 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  ceptions can be 
3a30: 64 65 61 6c 74 20 77 69 74 68 20 62 79 20 6d 61  dealt with by ma
3a40: 6b 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 0a  king additional.
3a50: 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 76  entries in the v
3a60: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 75 73 69  irtual table usi
3a70: 6e 67 20 74 68 65 20 22 73 6f 75 6e 64 73 6c 69  ng the "soundsli
3a80: 6b 65 22 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 70 3e  ke" column...<p>
3a90: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e  For example, man
3aa0: 79 20 77 6f 72 64 73 20 6f 66 20 47 72 65 65 6b  y words of Greek
3ab0: 20 6f 72 69 67 69 6e 20 62 65 67 69 6e 20 77 69   origin begin wi
3ac0: 74 68 20 6c 65 74 74 65 72 73 20 22 70 73 22 20  th letters "ps" 
3ad0: 77 68 65 72 65 0a 74 68 65 20 22 70 22 20 69 73  where.the "p" is
3ae0: 20 73 69 6c 65 6e 74 2e 20 20 45 78 3a 20 20 70   silent.  Ex:  p
3af0: 73 61 6c 6d 2c 20 70 73 65 75 64 6f 6e 79 6d 2c  salm, pseudonym,
3b00: 20 70 73 6f 72 69 61 73 69 73 2c 20 70 73 79 63   psoriasis, psyc
3b10: 68 65 2e 20 20 49 6e 0a 61 6e 6f 74 68 65 72 20  he.  In.another 
3b20: 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79 20 53 63  example, many Sc
3b30: 6f 74 74 69 73 68 20 73 75 72 6e 61 6d 65 73 20  ottish surnames 
3b40: 63 61 6e 20 62 65 20 73 70 65 6c 6c 65 64 20 77  can be spelled w
3b50: 69 74 68 20 61 6e 0a 69 6e 69 74 69 61 6c 20 22  ith an.initial "
3b60: 4d 61 63 22 20 6f 72 20 22 4d 63 22 2e 20 20 54  Mac" or "Mc".  T
3b70: 68 75 73 2c 20 22 4d 61 63 4b 61 79 22 20 61 6e  hus, "MacKay" an
3b80: 64 20 22 4d 63 4b 61 79 22 20 61 72 65 20 62 6f  d "McKay" are bo
3b90: 74 68 20 70 72 6f 6e 6f 75 6e 63 65 64 0a 74 68  th pronounced.th
3ba0: 65 20 73 61 6d 65 2e 0a 0a 3c 70 3e 41 63 63 6f  e same...<p>Acco
3bb0: 6d 6d 6f 64 61 74 69 6f 6e 20 63 61 6e 20 62 65  mmodation can be
3bc0: 20 6d 61 64 65 20 66 6f 72 20 77 6f 72 64 73 20   made for words 
3bd0: 74 68 61 74 20 61 72 65 20 6e 6f 74 20 73 70 65  that are not spe
3be0: 6c 6c 65 64 20 61 73 20 74 68 65 79 0a 73 6f 75  lled as they.sou
3bf0: 6e 64 20 62 79 20 6d 61 6b 69 6e 67 20 61 64 64  nd by making add
3c00: 69 74 69 6f 6e 61 6c 20 65 6e 74 72 69 65 73 20  itional entries 
3c10: 69 6e 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c  into the virtual
3c20: 20 74 61 62 6c 65 20 66 6f 72 20 74 68 65 0a 73   table for the.s
3c30: 61 6d 65 20 77 6f 72 64 2c 20 62 75 74 20 61 64  ame word, but ad
3c40: 64 69 6e 67 20 61 6e 20 61 6c 74 65 72 6e 61 74  ding an alternat
3c50: 69 76 65 20 73 70 65 6c 6c 69 6e 67 20 69 6e 20  ive spelling in 
3c60: 74 68 65 20 22 73 6f 75 6e 64 73 6c 69 6b 65 22  the "soundslike"
3c70: 0a 63 6f 6c 75 6d 6e 2e 20 20 46 6f 72 20 65 78  .column.  For ex
3c80: 61 6d 70 6c 65 2c 20 74 68 65 20 63 61 6e 6f 6e  ample, the canon
3c90: 69 63 61 6c 20 65 6e 74 72 79 20 66 6f 72 20 22  ical entry for "
3ca0: 70 73 61 6c 6d 22 20 77 6f 75 6c 64 20 62 65 20  psalm" would be 
3cb0: 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  this:..<blockquo
3cc0: 74 65 3e 3c 70 72 65 3e 0a 20 20 49 4e 53 45 52  te><pre>.  INSER
3cd0: 54 20 49 4e 54 4f 20 64 65 6d 6f 28 77 6f 72 64  T INTO demo(word
3ce0: 29 20 56 41 4c 55 45 53 28 27 70 73 61 6c 6d 27  ) VALUES('psalm'
3cf0: 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
3d00: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 6f 20 65 6e  quote>..<p>To en
3d10: 68 61 6e 63 65 20 74 68 65 20 61 62 69 6c 69 74  hance the abilit
3d20: 79 20 74 6f 20 63 6f 72 72 65 63 74 20 74 68 65  y to correct the
3d30: 20 73 70 65 6c 6c 69 6e 67 20 6f 66 20 22 73 61   spelling of "sa
3d40: 6c 6d 22 20 69 6e 74 6f 0a 22 70 73 61 6c 6d 22  lm" into."psalm"
3d50: 2c 20 6d 61 6b 65 20 61 6e 20 61 64 64 69 74 69  , make an additi
3d60: 6f 6e 20 65 6e 74 72 79 20 6c 69 6b 65 20 74 68  on entry like th
3d70: 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
3d80: 3e 3c 70 72 65 3e 0a 20 20 49 4e 53 45 52 54 20  ><pre>.  INSERT 
3d90: 49 4e 54 4f 20 64 65 6d 6f 28 77 6f 72 64 2c 73  INTO demo(word,s
3da0: 6f 75 6e 64 73 6c 69 6b 65 29 20 56 41 4c 55 45  oundslike) VALUE
3db0: 53 28 27 70 73 61 6c 6d 27 2c 27 73 61 6c 6d 27  S('psalm','salm'
3dc0: 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
3dd0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 74 20 69 73  quote>..<p>It is
3de0: 20 6f 6b 20 74 6f 20 6d 61 6b 65 20 6d 75 6c 74   ok to make mult
3df0: 69 70 6c 65 20 65 6e 74 72 69 65 73 20 66 6f 72  iple entries for
3e00: 20 74 68 65 20 73 61 6d 65 20 77 6f 72 64 20 61   the same word a
3e10: 73 20 6c 6f 6e 67 20 61 73 0a 65 61 63 68 20 65  s long as.each e
3e20: 6e 74 72 79 20 68 61 73 20 61 20 64 69 66 66 65  ntry has a diffe
3e30: 72 65 6e 74 20 73 6f 75 6e 64 73 6c 69 6b 65 20  rent soundslike 
3e40: 76 61 6c 75 65 2e 20 20 4e 6f 74 65 20 74 68 61  value.  Note tha
3e50: 74 20 69 66 20 6e 6f 0a 73 6f 75 6e 64 73 6c 69  t if no.soundsli
3e60: 6b 65 20 76 61 6c 75 65 20 69 73 20 73 70 65 63  ke value is spec
3e70: 69 66 69 65 64 2c 20 74 68 65 20 73 6f 75 6e 64  ified, the sound
3e80: 73 6c 69 6b 65 20 64 65 66 61 75 6c 74 73 20 74  slike defaults t
3e90: 6f 20 74 68 65 20 77 6f 72 64 0a 69 74 73 65 6c  o the word.itsel
3ea0: 66 2e 0a 0a 3c 70 3e 4c 69 73 74 65 64 20 62 65  f...<p>Listed be
3eb0: 6c 6f 77 20 61 72 65 20 73 6f 6d 65 20 63 61 73  low are some cas
3ec0: 65 73 20 77 68 65 72 65 20 69 74 20 6d 69 67 68  es where it migh
3ed0: 74 20 6d 61 6b 65 20 73 65 6e 73 65 20 74 6f 20  t make sense to 
3ee0: 61 64 64 20 61 64 64 69 74 69 6f 6e 61 6c 0a 73  add additional.s
3ef0: 6f 75 6e 64 73 6c 69 6b 65 20 65 6e 74 72 69 65  oundslike entrie
3f00: 73 2e 20 20 54 68 65 20 73 70 65 63 69 66 69 63  s.  The specific
3f10: 20 65 6e 74 72 69 65 73 20 77 69 6c 6c 20 64 65   entries will de
3f20: 70 65 6e 64 20 6f 6e 20 74 68 65 20 61 70 70 6c  pend on the appl
3f30: 69 63 61 74 69 6f 6e 0a 61 6e 64 20 74 68 65 20  ication.and the 
3f40: 74 61 72 67 65 74 20 6c 61 6e 67 75 61 67 65 2e  target language.
3f50: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 53 69 6c 65 6e  ..<ul>.<li>Silen
3f60: 74 20 22 70 22 20 69 6e 20 77 6f 72 64 73 20 62  t "p" in words b
3f70: 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 22 70  eginning with "p
3f80: 73 22 3a 20 20 70 73 61 6c 6d 2c 20 70 73 79 63  s":  psalm, psyc
3f90: 68 65 0a 3c 6c 69 3e 53 69 6c 65 6e 74 20 22 70  he.<li>Silent "p
3fa0: 22 20 69 6e 20 77 6f 72 64 73 20 62 65 67 69 6e  " in words begin
3fb0: 6e 69 6e 67 20 77 69 74 68 20 22 70 6e 22 3a 20  ning with "pn": 
3fc0: 20 70 6e 65 75 6d 6f 6e 69 61 2c 20 70 6e 65 75   pneumonia, pneu
3fd0: 6d 61 74 69 63 0a 3c 6c 69 3e 53 69 6c 65 6e 74  matic.<li>Silent
3fe0: 20 22 70 22 20 69 6e 20 77 6f 72 64 73 20 62 65   "p" in words be
3ff0: 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 22 70 74  ginning with "pt
4000: 22 3a 20 20 70 74 65 72 6f 64 61 63 74 79 6c 2c  ":  pterodactyl,
4010: 20 70 74 6f 6c 65 6d 61 69 63 0a 3c 6c 69 3e 53   ptolemaic.<li>S
4020: 69 6c 65 6e 74 20 22 64 22 20 69 6e 20 77 6f 72  ilent "d" in wor
4030: 64 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ds beginning wit
4040: 68 20 22 64 6a 22 3a 20 20 64 6a 69 6e 6e 2c 20  h "dj":  djinn, 
4050: 44 6a 69 6b 61 72 74 61 0a 3c 6c 69 3e 53 69 6c  Djikarta.<li>Sil
4060: 65 6e 74 20 22 6b 22 20 69 6e 20 77 6f 72 64 73  ent "k" in words
4070: 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
4080: 22 6b 6e 22 3a 20 20 6b 6e 69 67 68 74 2c 20 4b  "kn":  knight, K
4090: 6e 75 74 68 73 6f 6e 0a 3c 6c 69 3e 53 69 6c 65  nuthson.<li>Sile
40a0: 6e 74 20 22 67 22 20 69 6e 20 77 6f 72 64 73 20  nt "g" in words 
40b0: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 22  beginning with "
40c0: 67 6e 22 3a 20 20 67 6e 61 72 6c 79 2c 20 67 6e  gn":  gnarly, gn
40d0: 6f 6d 65 2c 20 67 6e 61 74 0a 3c 6c 69 3e 22 4d  ome, gnat.<li>"M
40e0: 61 63 22 20 76 65 72 73 75 73 20 22 4d 63 22 20  ac" versus "Mc" 
40f0: 62 65 67 69 6e 6e 69 6e 67 20 53 63 6f 74 74 69  beginning Scotti
4100: 73 68 20 73 75 72 6e 61 6d 65 73 0a 3c 6c 69 3e  sh surnames.<li>
4110: 22 54 63 68 22 20 73 6f 75 6e 64 73 20 69 6e 20  "Tch" sounds in 
4120: 53 6c 61 76 69 63 20 77 6f 72 64 73 3a 20 20 54  Slavic words:  T
4130: 63 68 61 69 6b 6f 76 73 6b 79 20 76 73 2e 20 43  chaikovsky vs. C
4140: 68 61 79 6b 6f 76 73 6b 79 0a 3c 6c 69 3e 54 68  haykovsky.<li>Th
4150: 65 20 6c 65 74 74 65 72 20 22 6a 22 20 70 72 6f  e letter "j" pro
4160: 6e 6f 75 6e 63 65 64 20 6c 69 6b 65 20 22 68 22  nounced like "h"
4170: 20 69 6e 20 53 70 61 6e 69 73 68 3a 20 20 4c 61   in Spanish:  La
4180: 4a 6f 6c 6c 61 0a 3c 6c 69 3e 57 6f 72 64 73 20  Jolla.<li>Words 
4190: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 22  beginning with "
41a0: 77 72 22 20 76 65 72 73 75 73 20 22 72 22 3a 20  wr" versus "r": 
41b0: 20 77 72 69 74 65 20 76 73 2e 20 72 69 74 65 0a   write vs. rite.
41c0: 3c 6c 69 3e 4d 69 73 63 65 6c 6c 61 6e 65 6f 75  <li>Miscellaneou
41d0: 73 20 70 72 6f 62 6c 65 6d 20 77 6f 72 64 73 20  s problem words 
41e0: 73 75 63 68 20 61 73 20 22 64 65 62 74 22 2c 20  such as "debt", 
41f0: 22 74 73 65 74 73 65 22 2c 0a 20 20 20 20 20 20  "tsetse",.      
4200: 22 4e 67 75 79 65 6e 22 2c 20 22 56 61 6e 20 4e  "Nguyen", "Van N
4210: 75 79 65 73 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68  uyes"..</ul>..<h
4220: 31 3e 41 75 78 69 6c 69 61 72 79 20 46 75 6e 63  1>Auxiliary Func
4230: 74 69 6f 6e 73 3c 2f 68 31 3e 0a 0a 3c 70 3e 54  tions</h1>..<p>T
4240: 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6d  he source code m
4250: 6f 64 75 6c 65 20 74 68 61 74 20 69 6d 70 6c 65  odule that imple
4260: 6d 65 6e 74 73 20 74 68 65 20 73 70 65 6c 6c 66  ments the spellf
4270: 69 78 31 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ix1 virtual tabl
4280: 65 20 61 6c 73 6f 0a 69 6d 70 6c 65 6d 65 6e 74  e also.implement
4290: 73 20 73 65 76 65 72 61 6c 20 53 51 4c 20 66 75  s several SQL fu
42a0: 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  nctions that mig
42b0: 68 74 20 62 65 20 75 73 65 66 75 6c 20 74 6f 20  ht be useful to 
42c0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 74 68 61  applications.tha
42d0: 74 20 65 6d 70 6c 6f 79 20 73 70 65 6c 6c 66 69  t employ spellfi
42e0: 78 31 20 6f 72 20 66 6f 72 20 74 65 73 74 69 6e  x1 or for testin
42f0: 67 20 6f 72 20 64 69 61 67 6e 6f 73 74 69 63 20  g or diagnostic 
4300: 77 6f 72 6b 20 77 68 69 6c 65 20 64 65 76 65 6c  work while devel
4310: 6f 70 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f  oping.applicatio
4320: 6e 73 20 74 68 61 74 20 75 73 65 20 73 70 65 6c  ns that use spel
4330: 6c 66 69 78 31 2e 20 20 54 68 65 20 66 6f 6c 6c  lfix1.  The foll
4340: 6f 77 69 6e 67 20 61 75 78 69 6c 69 61 72 79 20  owing auxiliary 
4350: 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 0a 61 76  functions are.av
4360: 61 69 6c 61 62 6c 65 3a 0a 0a 3c 64 6c 3e 0a 3c  ailable:..<dl>.<
4370: 64 74 3e 3c 70 3e 3c 62 3e 65 64 69 74 64 69 73  dt><p><b>editdis
4380: 74 33 28 50 2c 57 29 3c 62 72 3e 65 64 69 74 64  t3(P,W)<br>editd
4390: 69 73 74 33 28 50 2c 57 2c 4c 29 3c 62 72 3e 65  ist3(P,W,L)<br>e
43a0: 64 69 74 64 69 73 74 33 28 54 29 3c 2f 62 3e 3c  ditdist3(T)</b><
43b0: 64 64 3e 0a 54 68 65 73 65 20 72 6f 75 74 69 6e  dd>.These routin
43c0: 65 73 20 70 72 6f 76 69 64 65 20 64 69 72 65 63  es provide direc
43d0: 74 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  t access to the 
43e0: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 57  version of the W
43f0: 61 67 6e 65 72 0a 65 64 69 74 2d 64 69 73 74 61  agner.edit-dista
4400: 6e 63 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  nce function tha
4410: 74 20 61 6c 6c 6f 77 73 20 66 6f 72 20 61 70 70  t allows for app
4420: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
4430: 20 77 65 69 67 68 74 73 0a 6f 6e 20 65 64 69 74   weights.on edit
4440: 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 54 68   operations.  Th
4450: 65 20 66 69 72 73 74 20 74 77 6f 20 66 6f 72 6d  e first two form
4460: 73 20 6f 66 20 74 68 69 73 20 66 75 6e 63 74 69  s of this functi
4470: 6f 6e 20 63 6f 6d 70 61 72 65 0a 70 61 74 74 65  on compare.patte
4480: 72 6e 20 50 20 61 67 61 69 6e 73 74 20 77 6f 72  rn P against wor
4490: 64 20 57 20 61 6e 64 20 72 65 74 75 72 6e 20 74  d W and return t
44a0: 68 65 20 65 64 69 74 20 64 69 73 74 61 6e 63 65  he edit distance
44b0: 2e 20 20 49 6e 20 74 68 65 20 66 69 72 73 74 0a  .  In the first.
44c0: 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 20 6c 61  function, the la
44d0: 6e 67 69 64 20 69 73 20 61 73 73 75 6d 65 64 20  ngid is assumed 
44e0: 74 6f 20 62 65 20 30 20 61 6e 64 20 69 6e 20 74  to be 0 and in t
44f0: 68 65 20 73 65 63 6f 6e 64 2c 20 74 68 65 0a 6c  he second, the.l
4500: 61 6e 67 69 64 20 69 73 20 67 69 76 65 6e 20 62  angid is given b
4510: 79 20 74 68 65 20 4c 20 70 61 72 61 6d 65 74 65  y the L paramete
4520: 72 2e 20 20 54 68 65 20 74 68 69 72 64 20 66 6f  r.  The third fo
4530: 72 6d 20 6f 66 20 74 68 69 73 20 66 75 6e 63 74  rm of this funct
4540: 69 6f 6e 0a 72 65 6c 6f 61 64 73 20 65 64 69 74  ion.reloads edit
4550: 20 64 69 73 74 61 6e 63 65 20 63 6f 65 66 66 69   distance coeffi
4560: 63 69 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  cients from the 
4570: 74 61 62 6c 65 20 6e 61 6d 65 64 20 62 79 20 54  table named by T
4580: 2e 0a 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 73 70 65  ...<dt><p><b>spe
4590: 6c 6c 66 69 78 31 5f 65 64 69 74 64 69 73 74 28  llfix1_editdist(
45a0: 50 2c 57 29 3c 2f 62 3e 3c 64 64 3e 0a 54 68 69  P,W)</b><dd>.Thi
45b0: 73 20 72 6f 75 74 69 6e 65 20 70 72 6f 76 69 64  s routine provid
45c0: 65 73 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  es access to the
45d0: 20 62 75 69 6c 74 2d 69 6e 20 57 61 67 6e 65 72   built-in Wagner
45e0: 20 65 64 69 74 2d 64 69 73 74 61 6e 63 65 0a 66   edit-distance.f
45f0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 75 73 65  unction that use
4600: 73 20 64 65 66 61 75 6c 74 2c 20 66 69 78 65 64  s default, fixed
4610: 20 63 6f 73 74 73 2e 20 20 54 68 65 20 76 61 6c   costs.  The val
4620: 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 0a 74  ue returned is.t
4630: 68 65 20 65 64 69 74 20 64 69 73 74 61 6e 63 65  he edit distance
4640: 20 6e 65 65 64 65 64 20 74 6f 20 74 72 61 6e 73   needed to trans
4650: 66 6f 72 6d 20 57 20 69 6e 74 6f 20 50 2e 0a 0a  form W into P...
4660: 3c 64 74 3e 3c 70 3e 3c 62 3e 73 70 65 6c 6c 66  <dt><p><b>spellf
4670: 69 78 31 5f 70 68 6f 6e 65 68 61 73 68 28 58 29  ix1_phonehash(X)
4680: 3c 2f 62 3e 3c 64 64 3e 0a 54 68 69 73 20 72 6f  </b><dd>.This ro
4690: 75 74 69 6e 65 20 63 6f 6e 73 74 72 75 63 74 73  utine constructs
46a0: 20 61 20 70 68 6f 6e 65 74 69 63 20 68 61 73 68   a phonetic hash
46b0: 20 6f 66 20 74 68 65 20 70 75 72 65 20 61 73 63   of the pure asc
46c0: 69 69 20 69 6e 70 75 74 20 77 6f 72 64 20 58 0a  ii input word X.
46d0: 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 61 74  and returns that
46e0: 20 68 61 73 68 2e 20 20 54 68 69 73 20 72 6f 75   hash.  This rou
46f0: 74 69 6e 65 20 69 73 20 75 73 65 64 20 69 6e 74  tine is used int
4700: 65 72 6e 61 6c 6c 79 20 62 79 20 73 70 65 6c 6c  ernally by spell
4710: 66 69 78 31 20 69 6e 0a 6f 72 64 65 72 20 74 6f  fix1 in.order to
4720: 20 74 72 61 6e 73 66 6f 72 6d 20 74 68 65 20 4b   transform the K
4730: 31 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  1 column of the 
4740: 73 68 61 64 6f 77 20 74 61 62 6c 65 20 69 6e 74  shadow table int
4750: 6f 20 74 68 65 20 4b 32 0a 63 6f 6c 75 6d 6e 2e  o the K2.column.
4760: 0a 0a 3c 64 74 3e 3c 70 3e 3c 62 3e 73 70 65 6c  ..<dt><p><b>spel
4770: 6c 66 69 78 31 5f 73 63 72 69 70 74 63 6f 64 65  lfix1_scriptcode
4780: 28 58 29 3c 2f 62 3e 3c 64 64 3e 0a 47 69 76 65  (X)</b><dd>.Give
4790: 6e 20 61 6e 20 69 6e 70 75 74 20 73 74 72 69 6e  n an input strin
47a0: 67 20 58 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  g X, this routin
47b0: 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 64 65  e attempts to de
47c0: 74 65 72 6d 69 6e 65 20 74 68 65 20 64 6f 6d 69  termine the domi
47d0: 6e 61 6e 74 0a 73 63 72 69 70 74 20 6f 66 20 74  nant.script of t
47e0: 68 61 74 20 69 6e 70 75 74 20 61 6e 64 20 72 65  hat input and re
47f0: 74 75 72 6e 73 20 74 68 65 20 49 53 4f 2d 31 35  turns the ISO-15
4800: 39 32 34 20 6e 75 6d 65 72 69 63 20 63 6f 64 65  924 numeric code
4810: 20 66 6f 72 20 74 68 61 74 0a 73 63 72 69 70 74   for that.script
4820: 2e 20 20 54 68 65 20 63 75 72 72 65 6e 74 20 69  .  The current i
4830: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 75 6e  mplementation un
4840: 64 65 72 73 74 61 6e 64 73 20 74 68 65 20 66 6f  derstands the fo
4850: 6c 6c 6f 77 69 6e 67 20 73 63 72 69 70 74 73 3a  llowing scripts:
4860: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 32 31 35 20 2d  .<ul>.<li> 215 -
4870: 20 4c 61 74 69 6e 0a 3c 6c 69 3e 20 32 32 30 20   Latin.<li> 220 
4880: 2d 20 43 79 72 69 6c 6c 69 63 0a 3c 6c 69 3e 20  - Cyrillic.<li> 
4890: 32 30 30 20 2d 20 47 72 65 65 6b 0a 3c 2f 75 6c  200 - Greek.</ul
48a0: 3e 0a 41 64 64 69 74 69 6f 6e 61 6c 20 6c 61 6e  >.Additional lan
48b0: 67 75 61 67 65 20 63 6f 64 65 73 20 6d 69 67 68  guage codes migh
48c0: 74 20 62 65 20 61 64 64 65 64 20 69 6e 20 66 75  t be added in fu
48d0: 74 75 72 65 20 72 65 6c 65 61 73 65 73 2e 0a 0a  ture releases...
48e0: 3c 64 74 3e 3c 70 3e 3c 62 3e 73 70 65 6c 6c 66  <dt><p><b>spellf
48f0: 69 78 31 5f 74 72 61 6e 73 6c 69 74 28 58 29 3c  ix1_translit(X)<
4900: 2f 62 3e 3c 64 64 3e 0a 54 68 69 73 20 72 6f 75  /b><dd>.This rou
4910: 74 69 6e 65 20 74 72 61 6e 73 6c 69 74 65 72 61  tine translitera
4920: 74 65 73 20 75 6e 69 63 6f 64 65 20 74 65 78 74  tes unicode text
4930: 20 69 6e 74 6f 20 70 75 72 65 20 61 73 63 69 69   into pure ascii
4940: 2c 20 72 65 74 75 72 6e 69 6e 67 0a 74 68 65 20  , returning.the 
4950: 70 75 72 65 20 61 73 63 69 69 20 72 65 70 72 65  pure ascii repre
4960: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
4970: 20 69 6e 70 75 74 20 74 65 78 74 20 58 2e 20 20   input text X.  
4980: 54 68 69 73 20 69 73 20 74 68 65 20 66 75 6e 63  This is the func
4990: 74 69 6f 6e 0a 74 68 61 74 20 69 73 20 75 73 65  tion.that is use
49a0: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 74 6f 20  d internally to 
49b0: 74 72 61 6e 73 66 6f 72 6d 20 76 6f 63 61 62 75  transform vocabu
49c0: 6c 61 72 79 20 77 6f 72 64 73 20 69 6e 74 6f 20  lary words into 
49d0: 74 68 65 20 4b 31 0a 63 6f 6c 75 6d 6e 20 6f 66  the K1.column of
49e0: 20 74 68 65 20 73 68 61 64 6f 77 20 74 61 62 6c   the shadow tabl
49f0: 65 2e 0a 0a 3c 2f 64 6c 3e 0a 0a 3c 74 63 6c 3e  e...</dl>..<tcl>
4a00: 68 64 5f 66 72 61 67 6d 65 6e 74 20 65 64 69 74  hd_fragment edit
4a10: 64 69 73 74 33 20 65 64 69 74 64 69 73 74 33 3c  dist3 editdist3<
4a20: 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65 20 65 64  /tcl>.<h1>The ed
4a30: 69 74 64 69 73 74 33 20 66 75 6e 63 74 69 6f 6e  itdist3 function
4a40: 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 65 64  </h1>..<p>The ed
4a50: 69 74 64 69 73 74 33 20 61 6c 67 6f 72 69 74 68  itdist3 algorith
4a60: 6d 20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20  m is a function 
4a70: 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
4a80: 65 20 6d 69 6e 69 6d 75 6d 20 65 64 69 74 20 0a  e minimum edit .
4a90: 64 69 73 74 61 6e 63 65 20 28 61 2e 6b 2e 61 2e  distance (a.k.a.
4aa0: 20 74 68 65 20 4c 65 76 65 6e 73 68 74 65 69 6e   the Levenshtein
4ab0: 20 64 69 73 74 61 6e 63 65 29 20 62 65 74 77 65   distance) betwe
4ac0: 65 6e 20 74 77 6f 20 69 6e 70 75 74 20 73 74 72  en two input str
4ad0: 69 6e 67 73 2e 0a 54 68 65 20 65 64 69 74 64 69  ings..The editdi
4ae0: 73 74 33 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  st3 algorithm is
4af0: 20 61 20 63 6f 6e 66 69 67 75 72 61 62 6c 65 20   a configurable 
4b00: 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20 74  alternative to t
4b10: 68 65 20 64 65 66 61 75 6c 74 0a 65 64 69 74 20  he default.edit 
4b20: 64 69 73 74 61 6e 63 65 20 66 75 6e 63 74 69 6f  distance functio
4b30: 6e 20 6f 66 20 73 70 65 6c 6c 66 69 78 31 2e 0a  n of spellfix1..
4b40: 46 65 61 74 75 72 65 73 20 6f 66 20 65 64 69 74  Features of edit
4b50: 64 69 73 74 33 20 69 6e 63 6c 75 64 65 3a 0a 0a  dist3 include:..
4b60: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 74 20 77  <ul>.<li><p>It w
4b70: 6f 72 6b 73 20 77 69 74 68 20 75 6e 69 63 6f 64  orks with unicod
4b80: 65 20 28 55 54 46 38 29 20 74 65 78 74 2e 0a 0a  e (UTF8) text...
4b90: 3c 6c 69 3e 3c 70 3e 41 20 74 61 62 6c 65 20 6f  <li><p>A table o
4ba0: 66 20 69 6e 73 65 72 74 69 6f 6e 2c 20 64 65 6c  f insertion, del
4bb0: 65 74 69 6f 6e 2c 20 61 6e 64 20 73 75 62 73 74  etion, and subst
4bc0: 69 74 75 74 69 6f 6e 20 63 6f 73 74 73 20 63 61  itution costs ca
4bd0: 6e 20 62 65 20 0a 20 20 20 20 20 20 20 70 72 6f  n be .       pro
4be0: 76 69 64 65 64 20 62 79 20 74 68 65 20 61 70 70  vided by the app
4bf0: 6c 69 63 61 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c  lication...<li><
4c00: 70 3e 4d 75 6c 74 69 2d 63 68 61 72 61 63 74 65  p>Multi-characte
4c10: 72 20 69 6e 73 65 72 74 69 6f 6e 73 2c 20 64 65  r insertions, de
4c20: 6c 65 74 69 6f 6e 73 2c 20 61 6e 64 20 73 75 62  letions, and sub
4c30: 73 74 69 74 75 74 69 6f 6e 73 20 63 61 6e 20 62  stitutions can b
4c40: 65 0a 20 20 20 20 20 20 20 65 6e 75 6d 65 72 61  e.       enumera
4c50: 74 65 64 20 69 6e 20 74 68 65 20 63 6f 73 74 20  ted in the cost 
4c60: 74 61 62 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68  table..</ul>..<h
4c70: 31 3e 54 68 65 20 65 64 69 74 64 69 73 74 33 20  1>The editdist3 
4c80: 43 4f 53 54 20 74 61 62 6c 65 3c 2f 68 31 3e 0a  COST table</h1>.
4c90: 0a 3c 70 3e 54 6f 20 70 72 6f 67 72 61 6d 20 74  .<p>To program t
4ca0: 68 65 20 63 6f 73 74 73 20 6f 66 20 65 64 69 74  he costs of edit
4cb0: 64 69 73 74 33 2c 20 63 72 65 61 74 65 20 61 20  dist3, create a 
4cc0: 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
4cd0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 62  e following:..<b
4ce0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
4cf0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 64 69  CREATE TABLE edi
4d00: 74 63 6f 73 74 28 0a 20 20 69 4c 61 6e 67 20 49  tcost(.  iLang I
4d10: 4e 54 2c 20 20 20 2d 2d 20 54 68 65 20 6c 61 6e  NT,   -- The lan
4d20: 67 75 61 67 65 20 49 44 0a 20 20 63 46 72 6f 6d  guage ID.  cFrom
4d30: 20 54 45 58 54 2c 20 20 2d 2d 20 43 6f 6e 76 65   TEXT,  -- Conve
4d40: 72 74 20 74 65 78 74 20 66 72 6f 6d 20 74 68 69  rt text from thi
4d50: 73 0a 20 20 63 54 6f 20 20 20 54 45 58 54 2c 20  s.  cTo   TEXT, 
4d60: 20 2d 2d 20 43 6f 6e 76 65 72 74 20 74 65 78 74   -- Convert text
4d70: 20 69 6e 74 6f 20 74 68 69 73 0a 20 20 69 43 6f   into this.  iCo
4d80: 73 74 20 49 4e 54 20 20 20 20 2d 2d 20 54 68 65  st INT    -- The
4d90: 20 63 6f 73 74 20 6f 66 20 64 6f 69 6e 67 20 74   cost of doing t
4da0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 0a 29 3b  he conversion.);
4db0: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
4dc0: 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 73  ote>..<p>The cos
4dd0: 74 20 74 61 62 6c 65 20 63 61 6e 20 62 65 20 6e  t table can be n
4de0: 61 6d 65 64 20 61 6e 79 74 68 69 6e 67 20 79 6f  amed anything yo
4df0: 75 20 77 61 6e 74 20 2d 20 69 74 20 64 6f 65 73  u want - it does
4e00: 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65 0a   not have to be.
4e10: 63 61 6c 6c 65 64 20 22 65 64 69 74 63 6f 73 74  called "editcost
4e20: 22 2e 20 20 41 6e 64 20 74 68 65 20 74 61 62 6c  ".  And the tabl
4e30: 65 20 63 61 6e 20 63 6f 6e 74 61 69 6e 20 61 64  e can contain ad
4e40: 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
4e50: 2e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 69  ..The only requi
4e60: 72 65 6d 65 6e 74 20 69 73 20 74 68 61 74 20 74  rement is that t
4e70: 68 65 0a 74 61 62 6c 65 20 6d 75 73 74 20 63 6f  he.table must co
4e80: 6e 74 61 69 6e 20 74 68 65 20 66 6f 75 72 20 63  ntain the four c
4e90: 6f 6c 75 6d 6e 73 20 73 68 6f 77 20 61 62 6f 76  olumns show abov
4ea0: 65 2c 20 77 69 74 68 20 65 78 61 63 74 6c 79 20  e, with exactly 
4eb0: 74 68 65 20 6e 61 6d 65 73 20 73 68 6f 77 6e 2e  the names shown.
4ec0: 0a 0a 3c 70 3e 54 68 65 20 69 4c 61 6e 67 20 63  ..<p>The iLang c
4ed0: 6f 6c 75 6d 6e 20 69 73 20 61 20 6e 6f 6e 2d 6e  olumn is a non-n
4ee0: 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20  egative integer 
4ef0: 74 68 61 74 20 69 64 65 6e 74 69 66 69 65 73 20  that identifies 
4f00: 61 20 73 65 74 20 6f 66 20 63 6f 73 74 73 0a 61  a set of costs.a
4f10: 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 61  ppropriate for a
4f20: 20 70 61 72 74 69 63 75 6c 61 72 20 6c 61 6e 67   particular lang
4f30: 75 61 67 65 2e 20 20 54 68 65 20 65 64 69 74 64  uage.  The editd
4f40: 69 73 74 33 20 66 75 6e 63 74 69 6f 6e 20 77 69  ist3 function wi
4f50: 6c 6c 20 6f 6e 6c 79 20 75 73 65 0a 61 20 73 69  ll only use.a si
4f60: 6e 67 6c 65 20 69 4c 61 6e 67 20 76 61 6c 75 65  ngle iLang value
4f70: 20 66 6f 72 20 61 6e 79 20 67 69 76 65 6e 20 65   for any given e
4f80: 64 69 74 2d 64 69 73 74 61 6e 63 65 20 63 6f 6d  dit-distance com
4f90: 70 75 74 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  putation.  The d
4fa0: 65 66 61 75 6c 74 0a 76 61 6c 75 65 20 69 73 20  efault.value is 
4fb0: 30 2e 20 20 49 74 20 69 73 20 72 65 63 6f 6d 6d  0.  It is recomm
4fc0: 65 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c 69  ended that appli
4fd0: 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6f 6e 6c  cations that onl
4fe0: 79 20 6e 65 65 64 20 74 6f 20 75 73 65 20 61 0a  y need to use a.
4ff0: 73 69 6e 67 6c 65 20 6c 61 6e 67 75 61 67 65 20  single language 
5000: 61 6c 77 61 79 73 20 75 73 65 20 69 4c 61 6e 67  always use iLang
5010: 3d 3d 30 20 66 6f 72 20 61 6c 6c 20 65 6e 74 72  ==0 for all entr
5020: 69 65 73 2e 0a 0a 3c 70 3e 54 68 65 20 69 43 6f  ies...<p>The iCo
5030: 73 74 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  st column is the
5040: 20 6e 75 6d 65 72 69 63 20 63 6f 73 74 20 6f 66   numeric cost of
5050: 20 74 72 61 6e 73 66 6f 72 6d 69 6e 67 20 63 46   transforming cF
5060: 72 6f 6d 20 69 6e 74 6f 20 63 54 6f 2e 20 20 54  rom into cTo.  T
5070: 68 69 73 0a 76 61 6c 75 65 20 73 68 6f 75 6c 64  his.value should
5080: 20 62 65 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69   be a non-negati
5090: 76 65 20 69 6e 74 65 67 65 72 2c 20 61 6e 64 20  ve integer, and 
50a0: 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20  should probably 
50b0: 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31 30 30  be less than 100
50c0: 2e 0a 54 68 65 20 64 65 66 61 75 6c 74 20 73 69  ..The default si
50d0: 6e 67 6c 65 2d 63 68 61 72 61 63 74 65 72 20 69  ngle-character i
50e0: 6e 73 65 72 74 69 6f 6e 20 61 6e 64 20 64 65 6c  nsertion and del
50f0: 65 74 69 6f 6e 20 63 6f 73 74 73 20 61 72 65 20  etion costs are 
5100: 31 30 30 20 61 6e 64 20 74 68 65 0a 64 65 66 61  100 and the.defa
5110: 75 6c 74 20 73 69 6e 67 6c 65 2d 63 68 61 72 61  ult single-chara
5120: 63 74 65 72 20 74 6f 20 73 69 6e 67 6c 65 2d 63  cter to single-c
5130: 68 61 72 61 63 74 65 72 20 73 75 62 73 74 69 74  haracter substit
5140: 75 74 69 6f 6e 20 63 6f 73 74 20 69 73 20 31 35  ution cost is 15
5150: 30 2e 20 20 41 0a 63 6f 73 74 20 6f 66 20 31 30  0.  A.cost of 10
5160: 30 30 30 20 6f 72 20 6d 6f 72 65 20 69 73 20 63  000 or more is c
5170: 6f 6e 73 69 64 65 72 65 64 20 22 69 6e 66 69 6e  onsidered "infin
5180: 69 74 65 22 20 61 6e 64 20 63 61 75 73 65 73 20  ite" and causes 
5190: 74 68 65 20 72 75 6c 65 20 74 6f 20 62 65 0a 69  the rule to be.i
51a0: 67 6e 6f 72 65 64 2e 0a 0a 3c 70 3e 54 68 65 20  gnored...<p>The 
51b0: 63 46 72 6f 6d 20 61 6e 64 20 63 54 6f 20 63 6f  cFrom and cTo co
51c0: 6c 75 6d 6e 73 20 73 68 6f 77 20 65 64 69 74 20  lumns show edit 
51d0: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 73  transformation s
51e0: 74 72 69 6e 67 73 2e 20 20 45 69 74 68 65 72 20  trings.  Either 
51f0: 6f 72 20 62 6f 74 68 0a 63 6f 6c 75 6d 6e 73 20  or both.columns 
5200: 6d 61 79 20 63 6f 6e 74 61 69 6e 20 6d 6f 72 65  may contain more
5210: 20 74 68 61 6e 20 6f 6e 65 20 63 68 61 72 61 63   than one charac
5220: 74 65 72 2e 20 20 4f 72 20 65 69 74 68 65 72 20  ter.  Or either 
5230: 63 6f 6c 75 6d 6e 20 28 62 75 74 20 6e 6f 74 20  column (but not 
5240: 62 6f 74 68 29 0a 6d 61 79 20 68 6f 6c 64 20 61  both).may hold a
5250: 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20  n empty string. 
5260: 20 57 68 65 6e 20 63 46 72 6f 6d 20 69 73 20 65   When cFrom is e
5270: 6d 70 74 79 2c 20 74 68 61 74 20 69 73 20 74 68  mpty, that is th
5280: 65 20 63 6f 73 74 20 6f 66 20 69 6e 73 65 72 74  e cost of insert
5290: 69 6e 67 0a 63 54 6f 2e 20 20 57 68 65 6e 20 63  ing.cTo.  When c
52a0: 54 6f 20 69 73 20 65 6d 70 74 79 2c 20 74 68 61  To is empty, tha
52b0: 74 20 69 73 20 74 68 65 20 63 6f 73 74 20 6f 66  t is the cost of
52c0: 20 64 65 6c 65 74 69 6e 67 20 63 46 72 6f 6d 2e   deleting cFrom.
52d0: 0a 0a 3c 70 3e 49 6e 20 74 68 65 20 73 70 65 6c  ..<p>In the spel
52e0: 6c 66 69 78 31 20 61 6c 67 6f 72 69 74 68 6d 2c  lfix1 algorithm,
52f0: 20 63 46 72 6f 6d 20 69 73 20 74 68 65 20 74 65   cFrom is the te
5300: 78 74 20 61 73 20 74 68 65 20 75 73 65 72 20 65  xt as the user e
5310: 6e 74 65 72 65 64 20 69 74 20 61 6e 64 0a 63 54  ntered it and.cT
5320: 6f 20 69 73 20 74 68 65 20 63 6f 72 72 65 63 74  o is the correct
5330: 6c 79 20 73 70 65 6c 6c 65 64 20 74 65 78 74 20  ly spelled text 
5340: 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
5350: 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
5360: 68 65 20 67 6f 61 6c 0a 6f 66 20 74 68 65 20 65  he goal.of the e
5370: 64 69 74 64 69 73 74 33 20 61 6c 67 6f 72 69 74  ditdist3 algorit
5380: 68 6d 20 69 73 20 74 6f 20 64 65 74 65 72 6d 69  hm is to determi
5390: 6e 65 20 68 6f 77 20 63 6c 6f 73 65 20 74 68 65  ne how close the
53a0: 20 75 73 65 72 2d 65 6e 74 65 72 65 64 20 74 65   user-entered te
53b0: 78 74 20 69 73 0a 74 6f 20 74 68 65 20 64 69 63  xt is.to the dic
53c0: 74 69 6f 6e 61 72 79 20 74 65 78 74 2e 0a 0a 3c  tionary text...<
53d0: 70 3e 54 68 65 72 65 20 61 72 65 20 74 68 72 65  p>There are thre
53e0: 65 20 73 70 65 63 69 61 6c 2d 63 61 73 65 20 65  e special-case e
53f0: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 63 6f  ntries in the co
5400: 73 74 20 74 61 62 6c 65 3a 0a 0a 3c 74 61 62 6c  st table:..<tabl
5410: 65 20 62 6f 72 64 65 72 3d 31 20 61 6c 69 67 6e  e border=1 align
5420: 3d 63 65 6e 74 65 72 3e 0a 3c 74 72 3e 3c 74 68  =center>.<tr><th
5430: 3e 63 46 72 6f 6d 3c 2f 74 68 3e 3c 74 68 3e 63  >cFrom</th><th>c
5440: 54 6f 3c 2f 74 68 3e 3c 74 68 3e 4d 65 61 6e 69  To</th><th>Meani
5450: 6e 67 3c 2f 74 68 3e 3c 2f 74 72 3e 0a 3c 74 72  ng</th></tr>.<tr
5460: 3e 3c 74 64 3e 27 27 3c 2f 74 64 3e 3c 74 64 3e  ><td>''</td><td>
5470: 27 3f 27 3c 2f 74 64 3e 3c 74 64 3e 54 68 65 20  '?'</td><td>The 
5480: 64 65 66 61 75 6c 74 20 69 6e 73 65 72 74 69 6f  default insertio
5490: 6e 20 63 6f 73 74 3c 2f 74 64 3e 3c 2f 74 72 3e  n cost</td></tr>
54a0: 0a 3c 74 72 3e 3c 74 64 3e 27 3f 27 3c 2f 74 64  .<tr><td>'?'</td
54b0: 3e 3c 74 64 3e 27 27 3c 2f 74 64 3e 3c 74 64 3e  ><td>''</td><td>
54c0: 54 68 65 20 64 65 66 61 75 6c 74 20 64 65 6c 65  The default dele
54d0: 74 69 6f 6e 20 63 6f 73 74 3c 2f 74 64 3e 3c 2f  tion cost</td></
54e0: 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 27 3f 27 3c  tr>.<tr><td>'?'<
54f0: 2f 74 64 3e 3c 74 64 3e 27 3f 27 3c 2f 74 64 3e  /td><td>'?'</td>
5500: 3c 74 64 3e 54 68 65 20 64 65 66 61 75 6c 74 20  <td>The default 
5510: 73 75 62 73 74 69 74 75 74 69 6f 6e 20 63 6f 73  substitution cos
5520: 74 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61  t</td></tr>.</ta
5530: 62 6c 65 3e 0a 0a 3c 70 3e 49 66 20 61 6e 79 20  ble>..<p>If any 
5540: 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 2d 63  of the special-c
5550: 61 73 65 20 65 6e 74 72 69 65 73 20 73 68 6f 77  ase entries show
5560: 73 20 61 62 6f 76 65 20 61 72 65 20 6f 6d 69 74  s above are omit
5570: 74 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 76 61  ted, then the.va
5580: 6c 75 65 20 6f 66 20 31 30 30 20 69 73 20 75 73  lue of 100 is us
5590: 65 64 20 66 6f 72 20 69 6e 73 65 72 74 69 6f 6e  ed for insertion
55a0: 20 61 6e 64 20 64 65 6c 65 74 69 6f 6e 20 61 6e   and deletion an
55b0: 64 20 31 35 30 20 69 73 20 75 73 65 64 20 66 6f  d 150 is used fo
55c0: 72 0a 73 75 62 73 74 69 74 75 74 69 6f 6e 2e 20  r.substitution. 
55d0: 20 54 6f 20 64 69 73 61 62 6c 65 20 74 68 65 20   To disable the 
55e0: 64 65 66 61 75 6c 74 20 69 6e 73 65 72 74 69 6f  default insertio
55f0: 6e 2c 20 64 65 6c 65 74 69 6f 6e 2c 20 61 6e 64  n, deletion, and
5600: 2f 6f 72 20 73 75 62 73 74 69 74 75 74 69 6f 6e  /or substitution
5610: 0a 73 65 74 20 74 68 65 69 72 20 72 65 73 70 65  .set their respe
5620: 63 74 69 76 65 20 63 6f 73 74 20 74 6f 20 31 30  ctive cost to 10
5630: 30 30 30 20 6f 72 20 6d 6f 72 65 2e 0a 0a 3c 70  000 or more...<p
5640: 3e 4f 74 68 65 72 20 65 6e 74 72 69 65 73 20 69  >Other entries i
5650: 6e 20 74 68 65 20 63 6f 73 74 20 74 61 62 6c 65  n the cost table
5660: 20 73 70 65 63 69 66 69 63 20 74 72 61 6e 73 66   specific transf
5670: 6f 72 6d 73 20 66 6f 72 20 70 61 72 74 69 63 75  orms for particu
5680: 6c 61 72 20 0a 63 68 61 72 61 63 74 65 72 73 2e  lar .characters.
5690: 0a 54 68 65 20 63 6f 73 74 20 6f 66 20 73 70 65  .The cost of spe
56a0: 63 69 66 69 63 20 74 72 61 6e 73 66 6f 72 6d 73  cific transforms
56b0: 20 73 68 6f 75 6c 64 20 62 65 20 6c 65 73 73 20   should be less 
56c0: 74 68 61 6e 20 74 68 65 20 64 65 66 61 75 6c 74  than the default
56d0: 20 63 6f 73 74 73 2c 20 6f 72 20 65 6c 73 65 0a   costs, or else.
56e0: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 73 74  the default cost
56f0: 73 20 77 69 6c 6c 20 74 61 6b 65 20 70 72 65 63  s will take prec
5700: 65 64 65 6e 63 65 20 61 6e 64 20 74 68 65 20 73  edence and the s
5710: 70 65 63 69 66 69 63 20 74 72 61 6e 73 66 6f 72  pecific transfor
5720: 6d 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 0a 62  ms will never .b
5730: 65 20 75 73 65 64 2e 0a 0a 3c 70 3e 53 6f 6d 65  e used...<p>Some
5740: 20 65 78 61 6d 70 6c 65 2c 20 63 6f 73 74 20 74   example, cost t
5750: 61 62 6c 65 20 65 6e 74 72 69 65 73 3a 0a 0a 3c  able entries:..<
5760: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
5770: 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 65 64 69  .INSERT INTO edi
5780: 74 63 6f 73 74 28 69 4c 61 6e 67 2c 20 63 46 72  tcost(iLang, cFr
5790: 6f 6d 2c 20 63 54 6f 2c 20 69 43 6f 73 74 29 0a  om, cTo, iCost).
57a0: 56 41 4c 55 45 53 28 30 2c 20 27 61 27 2c 20 27  VALUES(0, 'a', '
57b0: c3 a4 27 2c 20 35 29 3b 0a 3c 2f 70 72 65 3e 3c  ..', 5);.</pre><
57c0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
57d0: 3e 54 68 65 20 72 75 6c 65 20 61 62 6f 76 65 20  >The rule above 
57e0: 73 61 79 73 20 74 68 61 74 20 74 68 65 20 6c 65  says that the le
57f0: 74 74 65 72 20 22 61 22 20 69 6e 20 75 73 65 72  tter "a" in user
5800: 20 69 6e 70 75 74 20 63 61 6e 20 62 65 20 6d 61   input can be ma
5810: 74 63 68 65 64 20 61 67 61 69 6e 73 74 0a 74 68  tched against.th
5820: 65 20 6c 65 74 74 65 72 20 22 c3 a4 22 20 69 6e  e letter ".." in
5830: 20 74 68 65 20 64 69 63 74 69 6f 6e 61 72 79 20   the dictionary 
5840: 77 69 74 68 20 61 20 70 65 6e 61 6c 74 79 20 6f  with a penalty o
5850: 66 20 35 2e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  f 5...<blockquot
5860: 65 3e 3c 70 72 65 3e 0a 49 4e 53 45 52 54 20 49  e><pre>.INSERT I
5870: 4e 54 4f 20 65 64 69 74 63 6f 73 74 28 69 4c 61  NTO editcost(iLa
5880: 6e 67 2c 20 63 46 72 6f 6d 2c 20 63 54 6f 2c 20  ng, cFrom, cTo, 
5890: 69 43 6f 73 74 29 0a 56 41 4c 55 45 53 28 30 2c  iCost).VALUES(0,
58a0: 20 27 73 73 27 2c 20 27 c3 9f 27 2c 20 38 29 3b   'ss', '..', 8);
58b0: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
58c0: 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 75 6d  ote>..<p>The num
58d0: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
58e0: 73 20 69 6e 20 63 46 72 6f 6d 20 61 6e 64 20 63  s in cFrom and c
58f0: 54 6f 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  To do not need t
5900: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 2e 20 20  o be the same.  
5910: 54 68 65 0a 72 75 6c 65 20 61 62 6f 76 65 20 73  The.rule above s
5920: 61 79 73 20 74 68 61 74 20 22 73 73 22 20 6f 6e  ays that "ss" on
5930: 20 75 73 65 72 20 69 6e 70 75 74 20 77 69 6c 6c   user input will
5940: 20 6d 61 74 63 68 20 22 c3 9f 22 20 77 69 74 68   match ".." with
5950: 20 61 20 70 65 6e 61 6c 74 79 20 6f 66 20 38 2e   a penalty of 8.
5960: 0a 0a 3c 68 31 3e 45 78 70 65 72 69 6d 65 6e 74  ..<h1>Experiment
5970: 69 6e 67 20 77 69 74 68 20 74 68 65 20 65 64 69  ing with the edi
5980: 74 63 6f 73 74 33 28 29 20 66 75 6e 63 74 69 6f  tcost3() functio
5990: 6e 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 73  n</h1>..<p>The s
59a0: 70 65 6c 6c 66 69 78 31 20 76 69 72 74 75 61 6c  pellfix1 virtual
59b0: 20 74 61 62 6c 65 0a 75 73 65 73 20 65 64 69 74   table.uses edit
59c0: 64 69 73 74 33 20 69 66 20 74 68 65 20 22 65 64  dist3 if the "ed
59d0: 69 74 5f 63 6f 73 74 5f 74 61 62 6c 65 3d 54 41  it_cost_table=TA
59e0: 42 4c 45 22 20 6f 70 74 69 6f 6e 0a 69 73 20 73  BLE" option.is s
59f0: 70 65 63 69 66 69 65 64 20 61 73 20 61 6e 20 61  pecified as an a
5a00: 72 67 75 6d 65 6e 74 20 77 68 65 6e 20 74 68 65  rgument when the
5a10: 20 73 70 65 6c 6c 66 69 78 31 20 76 69 72 74 75   spellfix1 virtu
5a20: 61 6c 20 74 61 62 6c 65 20 69 73 20 63 72 65 61  al table is crea
5a30: 74 65 64 2e 20 20 0a 42 75 74 20 65 64 69 74 64  ted.  .But editd
5a40: 69 73 74 33 20 63 61 6e 20 61 6c 73 6f 20 62 65  ist3 can also be
5a50: 20 74 65 73 74 65 64 20 64 69 72 65 63 74 6c 79   tested directly
5a60: 20 75 73 69 6e 67 20 74 68 65 20 62 75 69 6c 74   using the built
5a70: 2d 69 6e 20 22 65 64 69 74 64 69 73 74 33 28 29  -in "editdist3()
5a80: 22 0a 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20  ".SQL function. 
5a90: 20 54 68 65 20 65 64 69 74 64 69 73 74 33 28 29   The editdist3()
5aa0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 68 61   SQL function ha
5ab0: 73 20 33 20 66 6f 72 6d 73 3a 0a 0a 3c 6f 6c 3e  s 3 forms:..<ol>
5ac0: 0a 3c 6c 69 3e 20 65 64 69 74 64 69 73 74 33 28  .<li> editdist3(
5ad0: 27 54 41 42 4c 45 4e 41 4d 45 27 29 3b 0a 3c 6c  'TABLENAME');.<l
5ae0: 69 3e 20 65 64 69 74 64 69 73 74 33 28 27 73 74  i> editdist3('st
5af0: 72 69 6e 67 31 27 2c 20 27 73 74 72 69 6e 67 32  ring1', 'string2
5b00: 27 29 3b 0a 3c 6c 69 3e 20 65 64 69 74 64 69 73  ');.<li> editdis
5b10: 74 33 28 27 73 74 72 69 6e 67 31 27 2c 20 27 73  t3('string1', 's
5b20: 74 72 69 6e 67 32 27 2c 20 6c 61 6e 67 69 64 29  tring2', langid)
5b30: 3b 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20  ;.</ol>..<p>The 
5b40: 66 69 72 73 74 20 66 6f 72 6d 20 6c 6f 61 64 73  first form loads
5b50: 20 74 68 65 20 65 64 69 74 20 64 69 73 74 61 6e   the edit distan
5b60: 63 65 20 63 6f 65 66 66 69 63 69 65 6e 74 73 20  ce coefficients 
5b70: 66 72 6f 6d 20 61 20 74 61 62 6c 65 20 63 61 6c  from a table cal
5b80: 6c 65 64 0a 27 54 41 42 4c 45 4e 41 4d 45 27 2e  led.'TABLENAME'.
5b90: 20 20 41 6e 79 20 70 72 69 6f 72 20 63 6f 65 66    Any prior coef
5ba0: 66 69 63 69 65 6e 74 73 20 61 72 65 20 64 69 73  ficients are dis
5bb0: 63 61 72 64 65 64 2e 20 20 53 6f 20 77 68 65 6e  carded.  So when
5bc0: 20 65 78 70 65 72 69 6d 65 6e 74 69 6e 67 0a 77   experimenting.w
5bd0: 69 74 68 20 77 65 69 67 68 74 73 20 61 6e 64 20  ith weights and 
5be0: 74 68 65 20 77 65 69 67 68 74 20 74 61 62 6c 65  the weight table
5bf0: 20 63 68 61 6e 67 65 73 2c 20 73 69 6d 70 6c 79   changes, simply
5c00: 20 72 65 72 75 6e 20 74 68 65 20 73 69 6e 67 6c   rerun the singl
5c10: 65 2d 61 72 67 75 6d 65 6e 74 0a 66 6f 72 6d 20  e-argument.form 
5c20: 6f 66 20 65 64 69 74 64 69 73 74 33 28 29 20 74  of editdist3() t
5c30: 6f 20 72 65 6c 6f 61 64 20 72 65 76 69 73 65 64  o reload revised
5c40: 20 63 6f 65 66 66 69 63 69 65 6e 74 73 2e 20 20   coefficients.  
5c50: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 0a 65  Note that the .e
5c60: 64 69 74 20 64 69 73 74 61 6e 63 65 0a 77 65 69  dit distance.wei
5c70: 67 68 74 73 20 75 73 65 64 20 62 79 20 74 68 65  ghts used by the
5c80: 20 65 64 69 74 64 69 73 74 33 28 29 20 53 51 4c   editdist3() SQL
5c90: 20 66 75 6e 63 74 69 6f 6e 20 61 72 65 20 69 6e   function are in
5ca0: 64 65 70 65 6e 64 65 6e 74 20 66 72 6f 6d 20 74  dependent from t
5cb0: 68 65 0a 77 65 69 67 68 74 73 20 75 73 65 64 20  he.weights used 
5cc0: 62 79 20 74 68 65 20 73 70 65 6c 6c 66 69 78 31  by the spellfix1
5cd0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
5ce0: 0a 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 61  .<p>The second a
5cf0: 6e 64 20 74 68 69 72 64 20 66 6f 72 6d 73 20 72  nd third forms r
5d00: 65 74 75 72 6e 20 74 68 65 20 63 6f 6d 70 75 74  eturn the comput
5d10: 65 64 20 65 64 69 74 20 64 69 73 74 61 6e 63 65  ed edit distance
5d20: 20 62 65 74 77 65 65 6e 20 73 74 72 69 6e 67 73   between strings
5d30: 0a 27 73 74 72 69 6e 67 31 27 20 61 6e 64 20 22  .'string1' and "
5d40: 73 74 72 69 6e 67 32 27 2e 20 20 49 6e 20 74 68  string2'.  In th
5d50: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 61  e second form, a
5d60: 20 6c 61 6e 67 75 61 67 65 20 69 64 20 6f 66 20   language id of 
5d70: 30 20 69 73 20 75 73 65 64 2e 0a 54 68 65 20 6c  0 is used..The l
5d80: 61 6e 67 75 61 67 65 20 69 64 20 69 73 20 73 70  anguage id is sp
5d90: 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 74  ecified in the t
5da0: 68 69 72 64 20 66 6f 72 6d 2e 0a                 hird form..