Пример задачи для зачета. Исправление орфографических ошибок

Ваша задача — написать программу, которая ищет орфографические ошибки в тексте и пытается их исправить. Файл со словарем и с двумя текстами для проверки вы можете найти по ссылке exam1.zip (сверху есть кнопка скачать). Мы используем английский язык, потому что в нем слова изменяются значительно меньше, чем в русском.

обязательное упоминание источников текстов для соблюдения лицензий:

Часть 1

Создайте Java множество (Set) орфографически корректных вариантов английских слов. Это коллекция будет у нас орфографическим словарем. Прочитайте слова из файла dictionary.txt. В этом файле каждое слово находится в отдельной строке. Поэтому его можно прочитать с помощью метода Files.readAllLines(Path, Charset), он возвращает список строчек файла типа List<String>. Теперь прочитайте по очереди оба файла с текстами (alice.txt и liff.txt) и для каждого слова, не найденного в словаре, напечатайте его в консоли в отдельной строке.

Используйте следующее регулярное выражение для сканера в качестве разделителя слов: '?[^'a-zA-Z]+'?

myScanner.useDelimiter("'?[^'a-zA-Z]+'?");

Сохраняйте в множество Set уже выведенные ранее слова. И если какое-то слово уже выводилось как неизвестное, не выводите его второй раз.

Часть 2

В этой части мы будем предлагать варианты замены для неизвестных слов. Например, для слова qat мы не просто напишем, qat в отдельной строке, а еще и дополним вариантами исправления: qat: bat, cat, fat и другие варианты, которые будут найдены в словаре.

Алгоритм:

Допустим, мы получили слово qat, будем искать в словаре все похожие на него варианты написания:

  1. С изменением одной буквы. Пробуем по очереди изменить каждую из букв на все варианты от a до z. Сначала первую букву:

    aat, bat, cat, dat, ...

    Потом вторую:

    qat, qbt, qct, qdt, ...

    и т.д.

    Вы можете использовать такой цикл для перебора всех букв:

    for (char c = 'a'; c <= 'z'; c++)

  2. Вариант с убиранием одной из букв. Здесь в нашем примере будут только такие варианты:

    at (без первой буквы)

    qt (без второй буквы)

    qa (без третьей)

  3. С вставленной буквой:

    В начало: aqat, bqat, cqat, dqat, ……

    на вторую позицию qaat, qbat, qcat, qdat, …

    и т.д.

Все полученные варианты слов нужно проверить по словарю, и все, что подошло, предложить в качестве вариантов исправления. Вы можете использовать метод retainAll(Collection) для множества с вариантами исправлений , чтобы оставить в множестве только те элементы множества, которые есть в орфографическом словаре.

Решение

Вы можете посмотреть решение по ссылке https://bitbucket.org/iposov/iposov-programming/src/default/JavaCourse/Java%202018-2019/src/Orthography.java.