1 of 3

Python, 276 bytes

V='.oO-'
def F(d):
 D=lambda i:int(d[i])-1
 print"  "+" _  "[D(0)]*3+"\n "+"_. (=./_=._*=.\\__. _"[D(0)::4]+"\n"+\
" \\  "[D(4)]+"("+V[D(2)]+',._ '[D(1)]+V[D(3)]+")"+" //  "[D(5)]+'\n'+\
"< / "[D(4)]+"("+" ]> :    [< "[D(6)::4]+")"+"> \\ "[D(5)]+"\n ("+\
' "_ : _  "_ '[D(7)::4]+")"

This code is 282 bytes for readability, take away \*3 to get 276 bytes.

Builds the snowman up bit by bit.

Bonus

F("44444432") gives "sleepy russian bear":

 (_*_)
 (- -)
 (> <)
 (" ")