Я хочу проверить расстояние между двумя строками с точки зрения вставки/удаления/редактирования слов. Это похоже на расстояние levenshtein, но я забочусь только о словах, а не о персонажах. Например:Levenshtein расстояние, где мне только волнуют слова
«Кот сидел на коврике» & «Собака осторожно сидел на коврике»
будет иметь слово расстояние 3.
Я работаю с Rosetta кода C++ скрипт для levenshtein distance, но я не вижу, как это сделать.
#include <string>
#include <iostream>
using namespace std;
// Compute Levenshtein Distance
// Martin Ettl, 2012-10-05
size_t uiLevenshteinDistance(const std::string &s1, const std::string &s2)
{
const size_t m(s1.size());
const size_t n(s2.size());
if(m==0) return n;
if(n==0) return m;
size_t *costs = new size_t[n + 1];
for(size_t k=0; k<=n; k++) costs[k] = k;
size_t i = 0;
for (std::string::const_iterator it1 = s1.begin(); it1 != s1.end(); ++it1, ++i)
{
costs[0] = i+1;
size_t corner = i;
size_t j = 0;
for (std::string::const_iterator it2 = s2.begin(); it2 != s2.end(); ++it2, ++j)
{
size_t upper = costs[j+1];
if(*it1 == *it2)
{
costs[j+1] = corner;
}
else
{
size_t t(upper<corner?upper:corner);
costs[j+1] = (costs[j]<t?costs[j]:t)+1;
}
corner = upper;
}
}
size_t result = costs[n];
delete [] costs;
return result;
}
int main()
{
string s0 = "rosettacode";
string s1 = "raisethysword";
cout << "distance between " << s0 << " and " << s1 << " : "
<< uiLevenshteinDistance(s0,s1) << std::endl;
return 0;
}
В вашем случае, символом будет слово. Предложение будет просто символом. Вы должны разделить предложение на слова и сравнить их по отдельности. – VAndrei