我想在我的程序中使用Huffman。我正在使用此代码here从输入文本生成代码。 我按照他们的解释使用了它,例如:
message='man the stand banana man'
huffman.codebook(collections.Counter(message).items())
这将生成文本树并为每个字符分配代码。树显示为dict
。
huffTree= {'m': '0111', 'a': '10', 'n': '00', ' ': '111', 't': '1101', 'h': '0101', 'e': '0100', 's': '0110', 'd': '11001', 'b': '11000'}
我应用它来生成比特流:
bitStream = []
for ch in message:
bitStream.append(huffTree[ch])
然后从句子生成的比特流是:011110001111101010101001110110110110001100111111000100010001011101111000
我现在想要的是如何通过在python中遍历树来返回生成的原始文本的比特流。我正在努力解决这个问题,但没有成功,这一步没有明确的解决方案。
答案 0 :(得分:0)
知道霍夫曼代码是prefix code,我们可以利用它来解码你的比特流:
# Create a lookup map
lookup = { v:k for k,v in huffTree.items()}
# The decode function
def huffman_decode(msg):
left = 0
decoded = ''
for right in range(len(msg)+1):
token = msg[left:right]
if token in lookup:
decoded += lookup[token]
left = right
return decoded
huffman_decode(bitStream) #'man the stand banana man'