Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2013 20:18:41

al99
Зарегистрирован: 2013-05-29
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Сжатие текстового файла по словарю

Здравствуйте, нужна помощь чтоб закончить скрипт сжатия, алгоритм такой, текст разбивается на слова, составляется список повторений, присваивается уникальное значение, составляется словарь, он сохраняется в файле с “сжатым” текстом. В 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()

Офлайн

#2 Июнь 10, 2013 14:17:19

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Сжатие текстового файла по словарю

Что такое сжатый текст?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version