Freigeben über


Ваш код как облако, облако слов…

 Грэг Дункан

Что если вам понадобиться взглянуть на свой код с более высокого уровня? Постараться почувствовать что там? Что если вы сможете получить «облако слов/тегов»?

Скажем, примеры из Kinect SDK?

clip_image002[4]

Или, может быть, хотите взглянуть на некоторый текст как на облако?

Например, файл Readme из Kinect SDK?

clip_image004[4]

И что если вы захотите получить код, который делает это для вашего кода?

Генератор облака слов исходного кода

Сгенерировать облако слов из кода, чтобы увидеть, что он собой представляет и что делает. Облако слов – это набор случайным образом упорядоченных слов, переменных, имен классов и т.п., использующийся в вашем коде. Размер и цвет каждого слова выражает частоту его использования. Редко используемые слова небольшого размера и блёклые. Облако может дать вам представление о том, насколько хороша или плоха ваша кодовая база и как ее улучшить.

Поддерживаемые в настоящее время языки: С#, Java , VB . NET. [ГД: последний выпуск включает также текстовые файлы]

clip_image006[4]

Мотивация

Недавно во время семинара Кевлин Хенни (Kevlin Henney) продемонстрировал сообщение из блога Филипа Калькадо (Phillip Calçado) «Взгляните, насколько шумен ваш код».

Идея сообщения очень проста. Облако тегов (облако слов) является визуальным представлением текстовых данных. Слова обычно помещаются в некоторую прямоугольную область и важность каждого слова обозначается размером шрифта и цветом. Такой формат полезен для быстрого восприятия наиболее заметных терминов анализируемого текста. Одним из свободно доступных инструментов для построения таких облаков является Wordle https://www.wordle.net/. Можно скопировать кусок любого текста или URL веб-сайта и через несколько секунд вы получите представление о чем данный текст или веб-сайт.

Чтение облака тегов вашей базы кода

Итак, если вы убрали из кода комментарии, литералы, исключили некоторые общие слова ( вроде названия компании) и сгенерируете облако слов для него, вы получите интересную картину, которую можно обсудить с коллегами за кофе.

  • Если слова "if", "then", "else", "switch", "case" – первое, что бросается в глаза, то ваш код окроплен условными операторами!
  • Слово «string» находится в десятке главных слов? Поздравляем, если вы пишете программы обработки текстов, в противном случае это может плохо пахнуть.
  • Если вы пишете API или библиотеки, то должны увидеть слово «public» в первых строках. Если вы не работаете над библиотекой или API, это слово может быть сигналом к лучшей защите.
  • Вы видите свои классы с первого взгляда или или они находятся далеко в фоне? За «int», «byte», «array» и т.д.? Ваш код пишется на родном языке?

Замечаие по использованию: если вы не получили отчетливого результата, ваше облако слов кажется довольно пустым, попробуйте подогнать максимальный размер шрифта.

clip_image008[4]

Например, вот как выглядит облако с максимальным размером 72 пункта (по умолчанию):

clip_image010[4]

и 24;

clip_image012[4]

(Значение по умолчанию 72 в системе, которую я использую, бросает меня в дрожь… Я думал, что сделал что-то глупое, так как результат оказался настолько ограничен…эх!)

Я обнаружил, что два момента в проекте очень интересны – анализ текста и генерация облака.

clip_image014[4]

Вот фрагмент кода выделения текста:

 public class TextExtractor : BaseExtractor
{
     public TextExtractor(IEnumerable<FileInfo> files, IProgressIndicator progressIndicator)
         : base(progressIndicator)
     {
         Files = files;
     }
      protected IEnumerable<FileInfo> Files { get; set; }
      public override IEnumerable<string> GetWords()
     {
         foreach (FileInfo fileInfo in Files)
         {
             ProgressIndicator.SetMessage(Shorten(fileInfo.FullName, 60));
             using (StreamReader reader = fileInfo.OpenText())
             {
                 IEnumerable<string> words = GetWords(reader);
                 foreach (string word in words)
                 {
                     yield return word;
                 }
                 OnFileProcessed();
             }
         }
      }

clip_image016[4]

Снимок всего решения:

clip_image018[4]

Кстати, если вам интересно само управление облаком слов, как самостоятельный процесс и детали и логика, стоящие за этим, пожалуйста, проверьте проект Word Cloud (Tag Cloud) Generator Control for .NET Windows.Forms in С#.