Word/expression list frequency distribution
One obvious improvement: you call elif k in sample_text.split(): inside the loop over sorted(vocabulary_dict), so this operation happens multiple times. Instead, you could create a set (which has more efficient membership tests) outside the loop, so it only happens once:

samples = set(sample_text.split())
for k in sorted(vocabulary_dict):
    ...
    elif k in samples:
        ...


Also, does it really matter if you iterate over vocabulary_dict in sorted order?