Как я это вижу:
вы хотите создать таблицу, которая отображает неупорядоченные наборы букв в списки слов, т. Е. Пройти по словарю, чтобы вы могли, скажем,
lettermap[set(a,e,d,f)] = { "deaf", "fade" }
затем из начального слова вы найдете набор букв:
astronomers => (a,e,m,n,o,o,r,r,s,s,t)
затем переберите все разделы этого набора (это может быть самая техническая часть, просто сгенерировав все возможные разделы) и найдите слова для этого набора букв.
edit: хм, это почти то, что написал Джейсон Коэн.
edit: более того, в комментариях к вопросу упоминается генерация «хороших» анаграмм, как в примерах :). после того, как вы составите список всех возможных анаграмм, запустите их через WordNet и найдите те, которые семантически близки к исходной фразе:)