Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Черных Илья #17

Open
wants to merge 43 commits into
base: master
Choose a base branch
from
Open

Conversation

Ilya4rh
Copy link

@Ilya4rh Ilya4rh commented Dec 18, 2024

@@ -0,0 +1,8 @@
namespace TagsCloudVisualization.FileReaders;

public interface IFileReader
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше сразу сделать IWordsReader, пускай возвращает коллекицю строк, по слову в строке


namespace TagsCloudVisualization.Settings;

public class ImageSettings
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Настройки цветов стоит либо расширить, либо сократить


namespace TagsCloudVisualization.Tags;

public interface ITag
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не стоит делать лишние интерфейсы. Для класса просто содержащего данные нет смысла создавать интерфейс

this.fileReader = fileReader;
}

public Dictionary<string, int> HandleText()
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Название GetWordsCount будет более точно отображать суть метода, даже если он будет содержать в себе дополнительную предобработку текста

this.imageSettings = imageSettings;
}

public Bitmap Draw(IEnumerable<Tag> tags)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не всегда стоит упарываться с абстракциями над типами, в большинстве случаев будет лучше указывать в аргументах конкретный тип с которым будешь работать, например список или массив. Если хочется обеспечить неизменность коллекции, то есть readonly типы колекций

Comment on lines 24 to 30
foreach (var paragraph in paragraphs)
{
var wordsInParagraph = Regex.Matches(paragraph, @"\b\w+\b")
.Select(word => word.Value);

words.AddRange(wordsInParagraph);
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сейчас есть 3 парсера, у которых повторяется один и тот же код. Стоит его переиспользовать

Comment on lines 14 to 21
this.readers = readers;
var reader = GetReader(settings.PathToText);

words = reader.Read(settings.PathToText);

var boringWordsReader = GetReader(settings.PathToBoringWords);

boringWords = boringWordsReader.Read(settings.PathToBoringWords).ToHashSet();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Чтение файла является времязатратной операцией, стоит убрать её из конструктора. В целом стоит избегать продолжительных по времени операций в конструкторе, т.к. обычно ожидается, что он работает быстро

Comment on lines 28 to 41
foreach (var word in words)
{
var lowerWord = word.ToLower();

if (wordsCount.TryGetValue(lowerWord, out var value))
{
wordsCount[lowerWord] = ++value;
continue;
}
if (!boringWords.Contains(lowerWord))
{
wordsCount[lowerWord] = 1;
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Стоит переписать на linq

Comment on lines 30 to 32
var sortedWords = wordsCount
.OrderByDescending(p => p.Value)
.ToList();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Стоит перенести в textHandler, и возвращать сразу список, если тебе не нужен словарь

using TagsCloudVisualization.Di;
using TagsCloudVisualization.Visualization;

var commandLineOptions = Parser.Default.ParseArguments<CommandLineOptions>(args).Value;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Стоит корректно обработать аргумент --help и т.п.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Так же стоит корректно завершать работу при вводе невалидных аргументов

{
public bool CanRead(string pathToFile)
{
return pathToFile.Split('.')[^1] == "doc";
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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


foreach (var paragraph in paragraphs)
{
var wordsInParagraph = Regex.Matches(paragraph, @"\b\w+\b")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+w - включает в себя буквы, цифры и знак подчеркивания, из них словами можно считать только буквы. Предпологается, что во входных данных будут только слова, поэтому в данном случае всё ок. Если поправить, получится парсить текст в любом виде

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants