Форум сайта python.su
Здравствуйте, нужна помощь чтоб закончить скрипт сжатия, алгоритм такой, текст разбивается на слова, составляется список повторений, присваивается уникальное значение, составляется словарь, он сохраняется в файле с “сжатым” текстом. В python я не шибко силен, пока есть вот это, нужен хотя бы намек как реализовать попроще извлечение словаря и обратную замену
import re def split_by_words(s): return re.split(r'(\w+)', s) def count_words(line_iterator): words = {} for line in line_iterator: for i, w in enumerate(split_by_words(line)): if i % 2 == 1 and len(w) > 2: lw = w.lower() words[lw] = words.get(lw, 0) + 1 return words def replace_words(s, replace_dict): return ''.join(replace_dict.get(w.lower(), w.lower()) for w in split_by_words(s)) def freq_pop_chart(words): return {w : i for i, w in enumerate(sorted(words, key = words.__getitem__, reverse = True))} def process_file(fin, fout): with open(fin, 'r') as f: words = count_words(f) replace_dict = {k : str(v) for k, v in freq_pop_chart(words).items()} with open(fin, 'r') as i: with open(fout, 'w') as o: print (replace_dict, file = o, end = '') for line in i: print(replace_words(line, replace_dict), file = o, end = '') def _main(): fin = input('in file > ') fout = input('out file > ') process_file(fin, fout) print('File processed.') if __name__ == '__main__': _main()
Офлайн