Страницы

Поиск по вопросам

среда, 17 октября 2018 г.

Частота слов в тексте

Ниже приведенный скрипт на Python подсчитывает частоту слов в тексте (непрерывных последовательностей букв за исключением знаков препинания) и выводит таблицу результатов.
Работает правильно. Вопрос вот в чем: можно ли сделать то же самое проще (например, меньше строк кода) на Python, Bash, PHP, Perl или это лучший способ?
import sys import string
file = open(sys.argv[1], "r") text = file.read() file.close()
table = string.maketrans("", "") words = text.lower().split(None)
frequencies = {} for word in words: trimmed = word.translate(table, string.punctuation) frequencies[trimmed] = frequencies.get(trimmed, 0) + 1
keys = sorted(frequencies.keys()) for word in keys: print "%-32s %d" % (word, frequencies[word])


Ответ

В вашем примере встречая подобную строку: "aa,bb,cc" она считается как "aabbcc 1", а должно быть: aa 1 bb 1 cc 1 Итак, мой вариант на Perl: #!/usr/bin/perl use strict;
my %result; while (<>) { $result{ lc $_ }++ for /(\w+)/g; }
printf "%-32s %d
", $_, $result{$_} for sort keys %result; можно его конечно скомпоновать и в одну строчку. но будет нечитаемо.

Комментариев нет:

Отправить комментарий