Python Forum

Full Version: I will accept any help with this task (compression code)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I need help with the compression code according to the simplified Huffman algorithm with a fixed code length
compression on the text loaded from the keyboard, then we write to the screen a simple console application under Windows
Please show what you have tried so far.
We are glad to help, but expect you to make a good effort as well.
If you've already written some code, show what you've got, and where there is an issue.
instead of taking text from the string constant, I want user to be able to type any text from the keyboard, I would like to also add decompression
string = 'TRykTrak'

# Creating tree nodes
class NodeTree(object):

    def __init__(self, left=None, right=None):
        self.left = left
        self.right = right

    def children(self):
        return (self.left, self.right)

    def nodes(self):
        return (self.left, self.right)

    def __str__(self):
        return '%s_%s' % (self.left, self.right)


# Main function implementing huffman coding
def huffman_code_tree(node, left=True, binString=''):
    if type(node) is str:
        return {node: binString}
    (l, r) = node.children()
    d = dict()
    d.update(huffman_code_tree(l, True, binString + '0'))
    d.update(huffman_code_tree(r, False, binString + '1'))
    return d


# Calculating frequency
freq = {}
for c in string:
    if c in freq:
        freq[c] += 1
    else:
        freq[c] = 1

freq = sorted(freq.items(), key=lambda x: x[1], reverse=True)

nodes = freq

while len(nodes) > 1:
    (key1, c1) = nodes[-1]
    (key2, c2) = nodes[-2]
    nodes = nodes[:-2]
    node = NodeTree(key1, key2)
    nodes.append((node, c1 + c2))

    nodes = sorted(nodes, key=lambda x: x[1], reverse=True)

huffmanCode = huffman_code_tree(nodes[0][0])

print(' Char | Huffman code ')
print('----------------------')
for (char, frequency) in freq:
    print(' %-4r |%12s' % (char, huffmanCode[char]))
rather rhan reinventing the wheel on the huffman encoding algorithm, choose one of the available packages here (if allowed by your prof):
https://pypi.org/search/?q=huffman

I can't really suggest one over the other since I haven't used any of them, but with a quick glance this one looks like it might fit the bill: https://pypi.org/search/?q=huffman+%2B+encoding