Так данная строка будет описанием или нет? Считаем, что будет.
1. Бьём строки на слова.
2. Возможно, выкинуть незначащие слова и преобразовать все в базовую форму. Надо признаться, тяжёлое дело: если нет словаря, то «дочь генерала» — это сущ+глагол или сущ+сущ? А со словарём: «уж» — это частица или существительное? В общем, лучше выдавать все возможные основания, и у нас получается нетранзитивное «=» — OK, если совпадает хотя бы одна форма. Возможно, проводим ёфикацию или деёфикацию: первое сложнее, второе чревато ложными срабатываниями.
3. Вычисляем расстояние Левенштейна между этими массивами, считая неделимыми сущностями не буквы, а слова.
4. Преобразуем его в наш процент — например, % = d / max{|s1|, |s2|}.
Можно продолжать: если совпадение не только по основанию, но и по форме — дополнительные очки. Работать с синонимами, как из словаря, так и ручными, например, небезызвестный
Milfgard придумал игру «Шакал», и вручную, по результатам исследования логов, вписал синоним «Койот». А нужно ли работать с орфоошибками? В том числе с неправильным написанием слова наподобие «джин/джинн»? И тот, и другой встречается в бутылке, но первый пьют, второй исполняет желания. :)
В общем, задача исследовательская, и важная её часть — понять, где остановиться и чего хватит, чтобы решить задачу более высокого уровня.