Сделайте fork этого репозитория и работайте в нем.
Вам нужно сделать приложение генератора облака слов по произвольному тексту. Примеры.
В облаке не должно быть повторяющихся слов, размер слова должен быть тем больше, чем чаще встречается слово, не должно быть "скучных" слов (предлогов, местоимений, ...).
Используйте алгоритм из блока про TDD.
В промышленном программировании при разработке далеко не всегда разумно создавать точки расширения "на будущее". Чаще руководствуются принципами YAGNI и KISS, поддерживая код как можно проще, а абстракции создаются и внедряются в код только в момент, когда понадобилось расширить функциональность.
Тем не менее для учебных целей в этой задаче мы требуем заранее предусмотреть точки расширения для наиболее вероятных потенциальных изменений в вашем продукте. Результат вашей работы должен быть расширяем без модификации уже имеющегося кода (Принцип OCP).
Вам запрещено использовать операторы if, switch, ?: и прочие условные операторы, если их можно заменить полиморфизмом.
Для сборки зависимостей используйте любой DI Container, отличный от Ninject. Довольно распространенные контейнеры — Autofac и Castle Windsor.
Все нетривиальные части покройте модульными тестами. Добавьте несколько более крупных тестов, проверяющих работу всей программы в сборе.
Ниже описаны обязательные пункты и пункты на перспективу. Выполните обязательные требования, а потом выберите и реализуйте несколько понравившихся пунктов на перспективу.
Даже если требование из перспективы не выполнено, соответствующая точка расширения в вашем коде уже должна быть.
- Источником данных должен быть файл со словами по одному в строке.
- В перспективе — поддерживать разные форматы файлов (txt, doc, docx, ...)
- На этапе предобработки, приведите все слова к нижнему регистру и исключите скучные слова
- В перспективе — дать возможность влиять на список скучных слов, которые не попадут в облако.
- В перспективе — поддерживать ввод данных из литературного текста, с приведением слов в начальную форму.
- В перспективе — дать возможность выбирать только определенные части речи (например, только существительные)
- В качестве результата программа должна генерировать png-файл.
- Должна быть возможность задать цвета, шрифт и размер изображения.
- В перспективе — поддерживать разные форматы изображений.
- В перспективе — поддерживать разные алгоритмы расцветки слов.
- Сделайте так, чтобы по одному тексту можно было сгенерировать несколько облаков тегов с помощью разных алгоритмов или одного алгоритма с разными настройками.
- В перспективе — реализовать несколько алгоритмов формирования облака тегов.
- Организуйте код так, чтобы было легко сделать оба вида клиентов — и клиента командной строки, и GUI приложение с вводом параметров и интерактивным просмотром.
- Реализуйте одного клиента по вашему выбору.
- В перспективе — реализуйте второго.
-
Библиотеки для разбора аргументов командной строки:
-
Приведение слова к начальной форме и определение частей речи:
- Библиотека NHunspell http://www.crawler-lib.net/nhunspell
- Утилита командной строки MyStem https://tech.yandex.ru/mystem/doc/usage-examples-docpage/