Counting all words from text and ordering it
All in all this is not bad.

Split into functions

I would split this into more functions. 


to generate a stream of words
to do the count
for the presentation


splitting the text

This is a simple generator

def text_split(text):
    text = text.lower().replace(",", "").replace(".", "")
    for word in text.split():
        yield unidecode.unidecode(word)


You can generalize this a bit using re and string.punctuation:

import re
import string

PUNCTUATION = re.compile(rf'[{string.punctuation}]')
def text_split_re(text):
    text = PUNCTUATION.sub('', text.lower())
    for word in text.split():
        yield unidecode.unidecode(word)


This removes all punctuation in 1 go.

Counter

you use dict.setdefault, so you read the documentation. If you had looked a tiny bit further, in the collections module, you'd have found Counter, which is exactly what you need, especially with it's most_common method. This is so handy, you don't really need the second method. You just need to feed it to the Counter.

presentation

def print_result(word_count: Counter):
    for word, count in word_count.most_common():
        print(f'{word} = {count}')


as simple as:

putting it together

from collections import Counter         
if __name__ == '__main__':
    words = text_split_re('''text here''')
    word_count = Counter(words)
    print_result(word_count)


tests

splitting this in parts also allows you to unit-test each of the parts

assert list(text_split_re('text here')) == ['text', 'here']
assert list(text_split_re('Text here')) == ['text', 'here']
assert list(text_split_re('Text he.re')) == ['text', 'here']
assert list(text_split_re('''Text 
    here''')) == ['text', 'here']