En primer lugar, la biblioteca clave de python para la lingüística computacional es NLTK ("Natural Language Toolkit"). Esta es una biblioteca madura y estable creada y mantenida por lingüistas computacionales profesionales. También tiene un extenso collection de tutoriales, preguntas frecuentes, etc. Lo recomiendo altamente.
A continuación se muestra una simple plantilla, en código Python, para el problema planteado en la pregunta; aunque es una plantilla que se ejecuta - suministrar cualquier texto como una cadena (como lo he hecho) y devolverá una lista de frecuencias de palabras, así como una lista clasificada de esas palabras con el fin de 'importancia' (o idoneidad como palabras clave) de acuerdo con una heurística muy simple.
Palabra clave de un determinado documento son (obviamente) elegidos entre palabras importantes en un documento - es decir, aquellas palabras que puedan distinguirlo de otro documento. Si no tuvo un conocimiento previo del conocimiento del tema del texto, una técnica común es inferir la importancia o el peso de una palabra/término dado a partir de su frecuencia o importancia = 1/frecuencia.
text = """ The intensity of the feeling makes up for the disproportion of the objects. Things are equal to the imagination, which have the power of affecting the mind with an equal degree of terror, admiration, delight, or love. When Lear calls upon the heavens to avenge his cause, "for they are old like him," there is nothing extravagant or impious in this sublime identification of his age with theirs; for there is no other image which could do justice to the agonising sense of his wrongs and his despair! """
BAD_CHARS = ".!?,\'\""
# transform text into a list words--removing punctuation and filtering small words
words = [ word.strip(BAD_CHARS) for word in text.strip().split() if len(word) > 4 ]
word_freq = {}
# generate a 'word histogram' for the text--ie, a list of the frequencies of each word
for word in words :
word_freq[word] = word_freq.get(word, 0) + 1
# sort the word list by frequency
# (just a DSU sort, there's a python built-in for this, but i can't remember it)
tx = [ (v, k) for (k, v) in word_freq.items()]
tx.sort(reverse=True)
word_freq_sorted = [ (k, v) for (v, k) in tx ]
# eg, what are the most common words in that text?
print(word_freq_sorted)
# returns: [('which', 4), ('other', 4), ('like', 4), ('what', 3), ('upon', 3)]
# obviously using a text larger than 50 or so words will give you more meaningful results
term_importance = lambda word : 1.0/word_freq[word]
# select document keywords from the words at/near the top of this list:
map(term_importance, word_freq.keys())
¿Tiene datos de entrenamiento? – bayer