Сделай fork этого репозитория и работай в нем.
Нужно сделать приложение генератора облака слов по произвольному тексту. Примеры.
В облаке не должно быть повторяющихся слов, размер слова должен быть тем больше, чем чаще встречается слово, не должно быть "скучных" слов (предлогов, местоимений, ...).
Используй алгоритм из блока про TDD.
В промышленном программировании при разработке далеко не всегда разумно создавать точки расширения "на будущее". Чаще руководствуются принципами YAGNI и KISS, поддерживая код как можно проще, а абстракции создаются и внедряются в код только в момент, когда понадобилось расширить функциональность.
Тем не менее для учебных целей в этой задаче требуется заранее предусмотреть точки расширения для наиболее вероятных потенциальных изменений в твоем продукте. Результат твоей работы должен быть расширяем без модификации уже имеющегося кода (Принцип OCP).
Запрещено использовать операторы if, switch, ?: и прочие условные операторы, если их можно заменить полиморфизмом.
Для сборки зависимостей используй любой DI Container, отличный от Ninject. Можно воспользоваться Microsoft.Extensions.DependencyInjection или довольно распространенным di контейнером Autofac. В выборе di контейнера может помочь статья IoC Container Benchmark - Performance comparison.
Все нетривиальные части покрой модульными тестами. Добавь несколько более крупных тестов, проверяющих работу всей программы в сборе.
Ниже описаны обязательные пункты и пункты на перспективу. Выполни обязательные требования, а потом выбери и реализуй несколько понравившихся пунктов на перспективу.
Даже если требование из перспективы не выполнено, соответствующая точка расширения в вашем коде уже должна быть.
Исходный текст:
- Источником данных должен быть файл со словами по одному в строке.
Предобработка слов:
- На этапе предобработки, приведи все слова к нижнему регистру и исключи скучные слова
Формат результата:
- В качестве результата программа должна генерировать png-файл.
- Должна быть возможность задать цвета, шрифт и размер изображения.
Алгоритм
- Сделай так, чтобы по одному тексту можно было сгенерировать несколько облаков тегов с помощью разных алгоритмов или одного алгоритма с разными настройками.
GUI или Console:
- Организуй код так, чтобы было легко сделать оба вида клиентов — и клиента командной строки, и GUI приложение с вводом параметров и интерактивным просмотром.
- Реализуй одного клиента по выбору
Исходный текст:
- поддерживать разные форматы файлов (txt, doc, docx, ...)
Предобработка слов:
- дать возможность влиять на список скучных слов, которые не попадут в облако.
- поддерживать ввод данных из литературного текста, с приведением слов в начальную форму.
- дать возможность выбирать только определенные части речи (например, только существительные)
Формат результата:
- поддерживать разные форматы изображений.
- поддерживать разные алгоритмы расцветки слов.
Алгоритм:
- реализовать несколько алгоритмов формирования облака тегов.
GUI или Console:
- реализуй второго клиента.
0 баллов - в решении отсутствует метод Main для запуска приложения, падающие тесты, не выполнены обязательные требования требования
1 балл - в решении есть какие-то проблемы, выполнены обязательные требования
2 балла - хорошо выполнены обязательные требования
3 балла - выполнены основыные пункты и реализованы минимум два пункта на перспективу из разных разделов.
-
Библиотеки для разбора аргументов командной строки:
-
Приведение слова к начальной форме и определение частей речи:
- Библиотека https://www.nuget.org/packages/WeCantSpell.Hunspell/
- Утилита командной строки MyStem https://tech.yandex.ru/mystem/doc/usage-examples-docpage/