Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Программа «Частотный словарь»


Автор: l0ser 26.12.2012, 16:52
Мне в отдалённом будущем (когда напишу эпос) понадобится программа типа «частотный словарь», которая составляет список слов и указывает их количество в тексте. Естественно, после составления такого списка слова можно построить по алфавиту и по частоте (количеству).

Так как я прочитал предисловие и введение в книжке «Изучаем Perl», я знаю, что Perl – самый лучший язык для возни с текстами. По крайней мере, для тех, кто знает Perl. smile

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

ТЗ: на входе – файл с текстом. Программа читает его, разделяя текст на слова. Разделители – перенос строки, знаки препинания и пробел. Массив (наверное, пригодится хеш) или ассоциативный список (не помню, как правильно называется, помню только толстую стрелочку => smile), каждому уникальному слову сопоставляется число, при каждом новом вхождении число увеличивается. Для извращений в Ворде результат сохраняется в файл как числа и соответствующие им слова или как слова и соответствующие им числа. Регистр символов не учитывается.

Возможно, в VB такую программу написать легче и приятнее? smile

Автор: vadiml 26.12.2012, 20:14
Слово -- ключ хеша, на каждое найденное слово
$hash{'слово'}++;

а для сортировки -- sort keys

Без хешей получится тормоз на любом языке.

"Возможно," перл изначально писался для анализа текстов, а VB -- нет.

Автор: alezzz 27.12.2012, 10:11
и стоит учесть особенности русского языка (если словарь будет под русский язык), например падежи.

Автор: l0ser 7.1.2013, 08:58
Спасибо, родные! smile

Автор: dixoNICH 7.1.2013, 14:06
$h{$_}++for split /[\s!;:\n?]/, $in;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)