Задать вопрос
@deleted-zenshot

Алгоритмический вопрос от будущего C#.NET-джуниора. С чего начать исследование?

Приветствую вас друзья.

Изучаю C# по книге Эндрю Троелсена. В данный момент вышел на уровень полного понимания того, о чём пишет автор. Так что чувствую в себе силы приступить к написанию своей первой программы на C#.

Придумал себе такую задачу-исследование:

Исследовать 100 английских книг, сгруппированных в 10 различных тематик.

Задача

Определить самые часто-используемые слова:

  1. Во всех 100 книгах.
  2. В каждой из 10 тематик.

Программу планирую написать универсальную, удобную, и так далее.

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

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

  1. Упростить задачу.
  2. Задать вопросы знатокам, чтобы получить хотя бы примерный план действий.

Упрощённая задача

Подсчитать частоту вхождения каждого слова (и его вариаций) в большом текстовом документе.

Исходные данные:

Текстовый документ (книга). Количество слов в документе может доходить до нескольких сотен тысяч. Например, в книге "Pro C# 5.0 and the .NET 4.5 Framework (Andrew Troelsen)" примерно 433 000 слов.

Что нужно сделать:

Подсчитать количество вхождений в документ:

  1. Каждого слова.
  2. Каждой группы однокоренных слов.

Пример группы однокоренных слов:

follow
followed
follower
followers
following
followership

Вопросы знатокам:

С чего начать? Как подступиться к решению этой задачи? В каких направлениях копать?

Кто-то сможет описать хотя бы примерный алгоритм?
  • Вопрос задан
  • 4044 просмотра
Подписаться 2 Оценить Комментировать
Решение пользователя lam0x86 К ответам на вопрос (5)
lam0x86
@lam0x86
Последовательность действий такая:
1) разбиение текста на лексические единицы (в вашем случае значимыми единицами являются слова). Удобно на выходе получать IEnumerable, представляющий ленивый итератор по словам в тексте.
2) приведение слова к нормальной форме, т. е. к нижнему регистру и, опционально, к общей словоформе (например, для существительных - им. падеж, ед. число, и т.д.)
3) добавление слова в Dictionary, где ключом является само слово, а значением - счётчик:
int count;
dictionary.TryGetValue(word, out count);
dictionary[word] = count + 1;
Ответ написан
Комментировать