```"""Count the frequencies of words in a string"""

import cmath as math

def wordfreq(text, is_filename=False):
"""Return a dictionary of words and word counts in a string."""
if is_filename:
with open(text) as f:
freqs = {}
for word in text.split():
lword = word.lower()
freqs[lword] = freqs.get(lword, 0) + 1
return freqs

def print_wordfreq(freqs, n=10):
"""Print the n most common words and counts in the freqs dict."""

words, counts = list(freqs.keys()), list(freqs.values())
items = list(zip(counts, words))
items.sort(reverse=True)
for (count, word) in items[:n]:
print(word, count)

def wordfreq_to_weightsize(worddict, minsize=25, maxsize=50, minalpha=0.5, maxalpha=1.0):
mincount = min(worddict.values())
maxcount = max(worddict.values())
weights = {}
for k, v in worddict.items():
w = (v-mincount)/(maxcount-mincount)
alpha = minalpha + (maxalpha-minalpha)*w
size = minsize + (maxsize-minsize)*w
weights[k] = (alpha, size)
return weights

def tagcloud(worddict, n=10, minsize=25, maxsize=50, minalpha=0.5, maxalpha=1.0):
from matplotlib import pyplot as plt
import random

worddict = wordfreq_to_weightsize(worddict, minsize, maxsize, minalpha, maxalpha)

fig = plt.figure()
ax.set_position([0.0,0.0,1.0,1.0])
plt.xticks([])
plt.yticks([])

words = list(worddict.keys())
alphas = [v[0] for v in list(worddict.values())]
sizes = [v[1] for v in list(worddict.values())]
items = list(zip(alphas, sizes, words))
items.sort(reverse=True)
for alpha, size, word in items[:n]:
# xpos = random.normalvariate(0.5, 0.3)
# ypos = random.normalvariate(0.5, 0.3)
xpos = random.uniform(0.0,1.0)
ypos = random.uniform(0.0,1.0)
ax.text(xpos, ypos, word.lower(), alpha=alpha, fontsize=size)
ax.autoscale_view()
return ax

```