zloy-zhake
7/9/2017 - 3:23 PM

Damb word frequency list

Damb word frequency list

# damb word frequency list
# ввод - текстовый поток
# вывод - текстовый поток
# cat file.txt | python3 damb_wfl.py > wfl.txt

import sys
import string
import re
import collections

word_list = []
word_dict = {} # {"слово" : сколько раз оно встречается}

# прочитать строку из потока
for line in sys.stdin:
    # заменить все знаки препинания на пробел (чтобы не поиметь проблем со словами, написанными через дефис)
    line = re.sub(r"[!\"#$%&\'()*+\,-\./:;<=>?@[\]^_`{|}~]", " ", line)
    
    # убрать лишние пробелы спереди/сзади
    if line[0].isspace() or line[len(line)-1].isspace():
        line = line.strip()

    # убрать множественные пробелы    
    while "  " in line:
        line = line.replace("  ", " ")
    
    # разбить строку на слова
    word_list = line.split()

    # добавить слова в dict, с обновлением статистики
    for word in word_list:
        if word in word_dict:
            word_dict[word] += 1
        else:
            word_dict[word] = 1

# сортируем dict по значению (по количеству слов)
sorted_word_dict = collections.OrderedDict(sorted(word_dict.items(), key=lambda t: t[1], reverse=True))

# вывести dictionary в поток построчно
for word in sorted_word_dict:
    # print(word + " - " + str(word_dict[word]))
    sys.stdout.write(word + " - " + str(word_dict[word]) + "\n")