diff options
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/htfuzzy/Speling.cc')
-rw-r--r-- | debian/htdig/htdig-3.2.0b6/htfuzzy/Speling.cc | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/htfuzzy/Speling.cc b/debian/htdig/htdig-3.2.0b6/htfuzzy/Speling.cc new file mode 100644 index 00000000..e9f365e3 --- /dev/null +++ b/debian/htdig/htdig-3.2.0b6/htfuzzy/Speling.cc @@ -0,0 +1,138 @@ +// +// Speling.h +// +// Speling: (sic) Performs elementary (one-off) spelling correction for ht://Dig +// +// Part of the ht://Dig package <http://www.htdig.org/> +// Copyright (c) 1995-2004 The ht://Dig Group +// For copyright details, see the file COPYING in your distribution +// or the GNU Library General Public License (LGPL) version 2 or later +// <http://www.gnu.org/copyleft/lgpl.html> +// +// $Id: Speling.cc,v 1.12 2004/05/28 13:15:20 lha Exp $ +// + +#ifdef HAVE_CONFIG_H +#include "htconfig.h" +#endif /* HAVE_CONFIG_H */ + +#include <fcntl.h> + +#include "Speling.h" +#include "htString.h" +#include "List.h" +#include "StringMatch.h" +#include "HtConfiguration.h" + +#ifdef HAVE_STD +#include <fstream> +#ifdef HAVE_NAMESPACES +using namespace std; +#endif +#else +#include <fstream.h> +#endif /* HAVE_STD */ + +#include <stdio.h> + +//***************************************************************************** +// Speling::Speling(const HtConfiguration& config_arg) +// +Speling::Speling(const HtConfiguration& config_arg) : + Fuzzy(config_arg) +{ + name = "speling"; +} + + +//***************************************************************************** +// Speling::~Speling() +// +Speling::~Speling() +{ +} + + +//***************************************************************************** +// A fairly efficient one-off spelling checker +// This generates the small list of possibilities and +// checks to see if they exist... +// +void +Speling::getWords(char *w, List &words) +{ + if ((int)strlen(w) < config.Value("minimum_speling_length",5)) + return; + + HtWordList wordDB(config); + // last arg=1 -> open to compare only "word" part of of word keys + if (wordDB.Open(config["word_db"], O_RDONLY, 1) == NOTOK) + return; + + String initial = w; + String stripped = initial; + HtStripPunctuation(stripped); + String tail; + int max_length = stripped.length() - 1; + + for (int pos = 0; pos < max_length; pos++) + { + // First transposes + // (these are really common) + initial = stripped; + char temp = initial[pos]; + initial[pos] = initial[pos+1]; + initial[pos+1] = temp; + if (!wordDB.Exists(initial)) // Seems weird, but this is correct + words.Add(new String(initial)); + + // Now let's do deletions + initial = stripped; + tail = initial.sub(pos+1); + if (pos > 0) + { + initial = initial.sub(0, pos); + initial += tail; + } + else + initial = tail; + + if (!wordDB.Exists(initial)) // Seems weird, but this is correct + words.Add(new String(initial)); + } + + // One last deletion -- check the last character! + initial = stripped; + initial = initial.sub(0, initial.length() - 1); + + if (!wordDB.Exists(initial)) // Seems weird, but this is correct + words.Add(new String(initial)); + + wordDB.Close(); +} + + +//***************************************************************************** +int +Speling::openIndex() +{ + return 0; +} + + +//***************************************************************************** +void +Speling::generateKey(char *, String &) +{ +} + + +//***************************************************************************** +void +Speling::addWord(char *) +{ +} + + + + |