Приветствую.
Задача заключается в реализации алгоритма для сравнения 2 текстов.
Есть два текста, один правильный(эталонный), а другой ввёден пользователем(который нам нужно проверить). Нужно сравнить их, и во втором тексте найти и подсветить ошибки - неправильно написаное слово, пропущеный знак и т.д.
Писать это всё планируется в Qt на C++.
Нашёл алгоритмы на LCS (longest common subsequence), но там идёт проверка и выделение по строкам, а мне нужно выделять не всю строку а именно неправильное слово или знак.
Буду рад любым подсказкам и советам по решению этой задачи.
Так преобразуйте тексты в наборы строк, где каждая строка это отдельное слово или знак.
Находите различия и собираете обратно в текст, подсвечивая различия.
На мой взгляд, главная сложность, что требуются 3 разные вещи при 3х типах ошибок:
При пропуске нужно идти дальше по оригиналу до совпадения
При добавке нужно идти по пользовательскому тексту до совпадения
При опечатке нужно идти "в чем не бывало".
Поэтому, алгоритм таков:
Идти по текстам (по буквам) до ошибки.
Пробуем "пропуск" идем по оригиналу дальше 10 символов с проверкой
- Если нашли совпадение 3х-4х символов - отмечаем ошибку и едем дальше
- Если не нашли совпадение - пробуем вариант "добавка" идем с проверкой по пользовательскому тексту 10 символов
- Если нашли совпадение - отмечаем ошибку и идем дальше
- Иначе считаем опечаткой
Делается проход с вычислением бинарной разницы одного слова относительно другого.
После обнаружения ошибки - фиксируете и затем двигаетесь дальше по эталонному тексту и ищите это "похожее" слово в набранном тексте.
Главное - грамотно определять "слова": отделять и не путать цифры и другие знаки со словами.