Ниже приведенный скрипт на 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;
можно его конечно скомпоновать и в одну строчку. но будет нечитаемо.
Комментариев нет:
Отправить комментарий