Beispiel #1
0
int main(){
  std::string src  = "sitting";
  std::string dest = "kitten";

  int dist = levenshtein_dist(src, dest);
  std::cout << "final res: " << dist << std::endl;
}
Beispiel #2
0
// On exit, function value is the Levenshtein distance, and word is
// the closest word for the input vocabulary
int did_you_mean(const char *input, const char **words, const int nwords, char **word)
{
  int i;
  int least_dist = -1;
  int closest_word;
  int dist;
  
  for (i=0; i<nwords; i++)
  {
    dist = levenshtein_dist(input, words[i]);
    
    if (dist == 0)
    {
      closest_word = i;
      least_dist = 0;
      break;
    }
    
    if (dist <= least_dist || least_dist < 0)
    {
      closest_word = i;
      least_dist = dist;
    }
  }
  
  
  word = malloc(strlen(words[closest_word]) * sizeof(*word));
  
  for (i=0; i<strlen(words[i]); i++)
    (*word)[i] = (words[closest_word])[i];
  
  return least_dist;
}
Beispiel #3
0
int main(int argc, char *argv[])
{
    // Distance between identical strings is zero
    assert( levenshtein_dist("", "") == 0 );
    assert( levenshtein_dist("same", "same") == 0 );

    // Symmetry
    assert( levenshtein_dist("", "the") == 3 );
    assert( levenshtein_dist("the", "") == 3 );
    assert( levenshtein_dist("vim", "vm") == 1 );
    assert( levenshtein_dist("vm", "vim") == 1 );
    assert( levenshtein_dist("a", "as") == 1 );
    assert( levenshtein_dist("as", "a") == 1 );
    assert( levenshtein_dist("mathematical", "methodical") == 5 );
    assert( levenshtein_dist("methodical", "mathematical") == 5 );

    // Triangle Inequality
    assert( levenshtein_dist("string", "sting") + levenshtein_dist("sting", "ring") >= levenshtein_dist("string", "ring"));

    // transpositions are 2 units
    assert( levenshtein_dist("typographical", "tyopgraphical") == 2 );
 
    return 0;
}