Russian Qt Forum

Программирование => Алгоритмы => Тема начата: serg_hd от Июнь 11, 2018, 21:03



Название: Spell checker (проверка орфографии)
Отправлено: serg_hd от Июнь 11, 2018, 21:03
Привет всем, такая задача.
Есть текст с неправильными словами, которые надо исправить согласно словам в словаре.
Причём:
- для изменения слова допускается только 2 операции: вставка и/или удаление символа;
- если это две вставки или два удаления, то эти два символа не должны находиться рядом;
Если под исправление подходит несколько слов из словаря, то отобразить их в тексте внутри фигурных скобок.

Пример.

Словарь:
rain the his main mainly plain

Текст:
hte mainy lain

В результате должно быть:
the {main mainly} plain

Сначала думал, что достаточно будет использовать алгоритм дистанции Левенштейна. Например, если сравнивать "hte" с "the", то он выдаст длину 2, для "his" тоже. И для самого алгоритма это правильно (т.к. работает заменами), но по заданию подойдёт только "the", т.к. два действия: сначала удаление в начале слова символа "h"  и потом добавление "h" между "t" и "e".
"his" не подойдёт, т.к. для приведения слова "hte" к "his" действий (именно удалений-вставок, а не замен) будет больше.
Может кто сталкивался уже?