Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
V0fka
80 / 7 / 1
Регистрация: 24.05.2010
Сообщений: 318
1

Оцените задание: программу анализа текста

04.06.2018, 10:25. Просмотров 963. Ответов 12
Метки нет (Все метки)

Привет!

Занимаюсь давно программированием, но не C#. C# иногда использую в работе, но это не основной язык. Хочу сменить сферу деятельности и заняться C#, как основным языком (в направлении ASP.NET MVC). В связи с этим хочжу по собеседованиям, выполняю тестовые задания. Выполнил несколько тестовых заданий, по паре из них получил ответ, что это говно, к сожалению, я не подхожу на указанную должность. Я во всех таких случаях просил указать на косяки в задании, но никакого ответа я не получил. Но мне для себя очень хотелось бы понимать свои косяки. Поэтому прошу сообщество помочь мне разобраться с этим. Если можно, буду выкладывать каждое задание отдельной темой, что бы не замусоливать тему. Итак, поехали.

Задание:
Реализовать программу анализа текста. Входной текст произвольный и может быть большим по объему. Количество и содержание метрик определяется самостоятельно. Требования к алгоритму: Программа должна быть расширяема к изменению списку метрик. Масштабируемость.
Метрики можете предлагать самостоятельно, например самый частый символ или количество восклицательных предложений. Процент существительных слов в тексте и т.д.
можете реализовать его любым удобным для Вас методом, в т.ч. используя только C#.
Мои комментарии по заданию:
Я не усложнял задачу анализа текста, т.к. считаю, что это сама по себе задача не простая и намеренно упростил некоторые моменты:
1. Программа корректно работает только с латиницей;
2. Пару метрик, которые работают со словами, считают, что слова состоят только из букв и цифр (без дифисов, апострофов и т.п.)
Решение в приложении (делалось в VS 2017).
0
Вложения
Тип файла: zip TextAnalyzer.zip (145.9 Кб, 16 просмотров)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2018, 10:25
Ответы с готовыми решениями:

Оцените задание: модуль расчета скидок
Привет! Задание: Решение: Буду благодарен за комментарии. Стартовая тема (программа...

Методика анализа неструктурированного текста
Прошу поделиться, опытом или накопленными Вами знаниями, может кто сталкивался. В общем у меня есть...

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

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

Программа анализа текста
Имеется код. #include <iostream> #include <string> #include <map> #include <fstream> using...

12
Usaga
Эксперт .NET
5732 / 3962 / 707
Регистрация: 21.01.2016
Сообщений: 15,568
Завершенные тесты: 2
06.06.2018, 13:25 2
Цитата Сообщение от V0fka Посмотреть сообщение
Но мне для себя очень хотелось бы понимать свои косяки. Поэтому прошу сообщество помочь мне разобраться с этим
Первый косяк: надо уметь пользоваться системами контроля версий. Соответственно, вместо архива очень "в кассу" была бы ссылка на репозиторий на GITHUB или любой другой хостинг исходников.

Цитата Сообщение от V0fka Посмотреть сообщение
1. Программа корректно работает только с латиницей;
Вот после этого комментария я бы даже открывать архив не стал и ответил бы вам про "вы нам не подходите".
1
Storm23
Эксперт .NETАвтор FAQ
8940 / 4333 / 1571
Регистрация: 11.01.2015
Сообщений: 5,564
Записей в блоге: 32
06.06.2018, 14:28 3
Лучший ответ Сообщение было отмечено Usaga как решение

Решение

V0fka,
Ну во-первых согласен с предыдущим оратором насчет "только с латиницей" это жесть.

Далее, по сути. В целом код нормальный, ничего такого ужасного в нем нет. За исключением пары мелких косяков. Я таких увидел четыре:

1) Вот эта строка выглядит довольно хм, топорно:
C#
1
ITextReader reader = new TextFileReader("D:\\text.txt");
Нужно было бы хотя бы положить в проект текстовый файл и читать его из папки приложения, либо же просить пользователя ввести путь к файлу.

2) Метод Analyz должен называться Analyze (мелочь конечно, но немного бросается в глаза)

3) Вот здесь может падать с nullrefrence exception:
C#
1
2
            var item = _words.OrderByDescending(kv => kv.Value).FirstOrDefault();
            return $"Наиболее встречающееся слово {item.Key}, количество вхождений {item.Value}";
4) Вот эти вставки перевода строки:
C#
1
CharacterRead?.Invoke(Convert.ToChar(13));
выглядят довольно костыльно, тем более почему они пишутся ДО самой строки?

5) Да и еще, нет комментариев перед публичными классами и методами (например в MetricsBase).

Но я не думаю, что это было причиной отказа. Все таки это мелочи.
Но вот само задание и ваша интерпретация - здесь вопрос.
Во-первых, ваши реализованный метрики очень простые. Ведь в задании даже есть пример метрики "количество восклицательных предложений", но вы его не реализовали и он существенно сложнее, чем ваши реализованные метрики.
То есть ваши метрики слишком примитивные. Учитывая, что само задание довольно простое, возможно от вас ожидали реализацию более сложных метрик? И кстати я не уверен, что ваша сигнатура методов MetricsBase подойдет и будет удобна для всех метрик.

Во-вторых, в задании есть слово "масштабируемость". Заметьте, что масштабируемость это не расширяемость. Расширяемость у вас есть, а масштабируемости - нет. В данном случае масштабируемость подразумевает как минимум многопоточность (либо один источник данных - много параллельных обработчиков, либо много источников - один обработчик и др варианты).
2
Usaga
Эксперт .NET
5732 / 3962 / 707
Регистрация: 21.01.2016
Сообщений: 15,568
Завершенные тесты: 2
06.06.2018, 14:34 4
Цитата Сообщение от Storm23 Посмотреть сообщение
5) Да и еще, нет комментариев перед публичными классами и методами (например в MetricsBase).
Спорный момент, на самом деле. Я про необходимость таких комментариев.
0
06.06.2018, 14:34
Storm23
Эксперт .NETАвтор FAQ
8940 / 4333 / 1571
Регистрация: 11.01.2015
Сообщений: 5,564
Записей в блоге: 32
06.06.2018, 14:51 5
Цитата Сообщение от Usaga Посмотреть сообщение
Спорный момент, на самом деле. Я про необходимость таких комментариев.
Ну во всяком случае по гайдам они должны быть. Да и поставьте себя на место разработчика - вот вам дали абстрактный класс, сделайте реализацию. А как я ее сделаю, если я не понимаю сути методов? А коментов нет.
И еще в intellisense будут светиться кстати подсказки именно от базового абстрактного класса.

V0fka,
Да и в догонку. Фирмы очень любят тесты. Вам бы вместо вот этого "D:\\text.txt" нужно было бы сделать пару тестов. И тогда бы мне не пришлось искать у себя текстовый файл, проверять, правильно ли оно считает и т.д.

А да, и еще, мне не очень понятно почему ваши метрики выводят свои результаты как строку. Это годится для демки, но в реальности, метрики же должны как-то обрабатываться и должны предоставлять результат в числовом виде.
1
V0fka
80 / 7 / 1
Регистрация: 24.05.2010
Сообщений: 318
06.06.2018, 16:12  [ТС] 6
Usaga, спасибо за комментарии, приму к сведению!

Storm23, спасибо большое за столь подробный разбор!
Цитата Сообщение от Storm23 Посмотреть сообщение
3) Вот здесь может падать с nullrefrence exception:
Если не ошибаюсь, я это проверял и исключения там не возникает. Если ничего нету, то по умолчанию возвращается элемент с пустым ключом и значением 0. И я решил, что и так сойдет...

Цитата Сообщение от Storm23 Посмотреть сообщение
4) Вот эти вставки перевода строки:
выглядят довольно костыльно, тем более почему они пишутся ДО самой строки?
Я сейчас уже точно не вспомню на 100% почему я так сделал, но вы полностью правы в том, что это был какой-то костыль. Возможно даже для расчета какой-то одной конкретной метрики. И я решил, как и в предыдущем случае, что сойдет и так.

Цитата Сообщение от Storm23 Посмотреть сообщение
Фирмы очень любят тесты. Вам бы вместо вот этого "D:\\text.txt" нужно было бы сделать пару тестов. И тогда бы мне не пришлось искать у себя текстовый файл, проверять, правильно ли оно считает и т.д.
Дело в том, что я в этом ничего не понимаю. Я читал, как пишутся тесты к приложениям ASP NET MVC. Не скажу, что все понял, но хотя бы какое-то представление имею. Но даже тут я переживаю, что если я напишу тесты и их посмотрят, то вопросов к тестам может быть ещё больше, чем к основному заданию.

Цитата Сообщение от Storm23 Посмотреть сообщение
А да, и еще, мне не очень понятно почему ваши метрики выводят свои результаты как строку. Это годится для демки, но в реальности, метрики же должны как-то обрабатываться и должны предоставлять результат в числовом виде.
Возможно я для себя неправильно интерпретировал задачу. Я подумал, что метрика может возвращать число (например количество слов), а может возвращать какой-то набор (количества каждого слова). Но сейчас, после прочтения ваших сообщений и самого задания, думаю, что, наверное идея о том, что может возвращаться что-то отличное от числа - ерунда.

Я сейчас для себя сделал вывод, что задание для меня оказалось на самом деле слишком сложное, видимо от соискателя ожидали уровень повыше того, что я могу. Какие-то вещи, возможно, я бы и сделал (вроде работы с кириллицей и подсчет количества восклицательных предложений), но вопрос с "масштабируемостью" я вряд ли нормально раскрыл бы даже при большом желании.

Storm23, Usaga, ещё раз спасибо за ответы!
0
Usaga
Эксперт .NET
5732 / 3962 / 707
Регистрация: 21.01.2016
Сообщений: 15,568
Завершенные тесты: 2
06.06.2018, 16:21 7
Цитата Сообщение от V0fka Посмотреть сообщение
Дело в том, что я в этом ничего не понимаю. Я читал, как пишутся тесты к приложениям ASP NET MVC. Не скажу, что все понял, но хотя бы какое-то представление имею.
Рекомендую почитать что-нибудь типа Рой Ошероув: Искусство автономного тестирования с примерами на С#.
1
V0fka
80 / 7 / 1
Регистрация: 24.05.2010
Сообщений: 318
06.06.2018, 16:30  [ТС] 8
Usaga, принял, спасибо!
0
aquaMakc
06.06.2018, 16:56
  #9

Не по теме:

Цитата Сообщение от Usaga Посмотреть сообщение
Рекомендую почитать что-нибудь
Проблема большинства таких книг в том, что они написаны в стиле "Как нарисовать сову", где 90% текста - "рисуем 2 кружочка", например, тестирование элементарных арифметических операций, 9% - красочное описание как здорово тестировать и все крутые программисты обязаны это делать и 1% - примечаний, что приведённые примеры чисто академические и в реальной жизни тесты гораздо сложнее.
После пары таких книг я и сам не проникся практикой тестирования.

0
V0fka
80 / 7 / 1
Регистрация: 24.05.2010
Сообщений: 318
07.06.2018, 10:42  [ТС] 10
aquaMakc, это точно. Читаешь и не можешь понять зачем проверять, казалось бы, очевидные вещи, вроде:

C#
1
2
int a = 2 + 3;
Assert.Equals(a, 5);
Пример утрирован, конечно, но примеры в литературе, по этой теме, подаются в примерно таком виде.
0
Usaga
Эксперт .NET
5732 / 3962 / 707
Регистрация: 21.01.2016
Сообщений: 15,568
Завершенные тесты: 2
07.06.2018, 11:26 11
V0fka, на самом деле, мне других книг не попадалось по тестрированю в C#. Есть "TDD" Кена Бека, но я не читал.

А эта книжка не фонтан, я согласен. Но идея тестирования в ней более-менее расписана. Как код разрабатывать ориентированный на тестирование, и не офигеть, там не написано.

Внезапно, по этой теме мне больше всего помогла книга Марк Симан: Внедрение зависимостей в .NET. Она не про тестирование ни разу, но изложенный там материал напрямую на это влияет, ибо сильно связанный код фиг протестируешь.
0
V0fka
80 / 7 / 1
Регистрация: 24.05.2010
Сообщений: 318
07.06.2018, 13:05  [ТС] 12
Usaga, я читал эту книгу . Вообще идеей тестирования я проникся давно. Но вот, например, модульные тесты (а именно о них пишут когда пытаются раскрыть вопросы тестирования) мне не заходят и я не понимаю целесообразности их писать в том виде, как это описывают в литературе. Повторюсь, но везде, где я об этом читал, у меня везде возникает один и тот же вопрос: зачем автор тестирует то, что поломаться не может? Ну то есть автор пишет выражение 2+3 и, условно говоря, строкой ниже проверяет, что результат будет 5 .
0
Usaga
Эксперт .NET
5732 / 3962 / 707
Регистрация: 21.01.2016
Сообщений: 15,568
Завершенные тесты: 2
07.06.2018, 13:20 13
V0fka, автор делает это для простоты и наглядности. Естественно, тестировать вообще всё подряд смысла имеет мало.

Да и применять тесты везде по разному можно. Где-то практикуется тестирование всего, кроме совсем уж очевидных вещей, типа 2 + 2 = 4. Где-то тесты пишут только для вещей, которые сложно вручную проверить, но легко сломать.
0
07.06.2018, 13:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2018, 13:20

Анализа текста, передаваемого в запрос
Доброго времени суток! По учебе вот такая задача стоит - Анализа текста, передаваемого в запрос,...

Программа для анализа текста в Delphi
Всем привет! Программировать начал не очень давно, есть базовые навыки Delphi. Есть пробелы с...

Бинарное дерево для анализа текста
Здравствуйте! Помогите решить проблему. нет перехода между char и int. struct tnode {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru