Есть две строки, 1я короткая 1-3 слова, вторая длинная 10-20 слов, надо определить, находится ли первая строка во второй или на сколько процентов она там находится. Посоветуйте алгоритмы :)
Я когда-то писала диплом на эту тему; у меня получилось, что лучше всего сравнивать русские слова по длине максимального общего префикса (как процент от длины меньшего из слов, должен быть выше порога). Для сравнения предложений — действительно сравнивать слова строк попарно и выводить функцию схожести через расстояния между похожими словами.
ай ай ай, ctrl+shift…
int proc = 100 — ((longStr.replace(shortStr,string.empty).length) / (longStr.length/100); //на столько процентов shortStr находится в longStr
Расстояние левеншнейна: 3
Наибольшая общая подпоследовательность: 3 — 012
Можно и по буквам это все сравнивать. Но это займет больше времени.
Вообще, не считая шинглов и прочей магии, типовые алгоритмы:
Hamming Distance
Levenstein Distance (Edit Distance)
Damerau-Levenstein Distance
Longest common substring
Longest common subsequence
Needleman-Wunsch distance
Smith–Waterman distance
Но, насколько я знаю, все они квадратичные по сложности. Так что не для всех задач подойдут.