Во-первых, ключевая библиотека Python для компьютерной лингвистики: NLTK (" Natural Language Toolkit "). Это стабильная, зрелая библиотека, созданная и поддерживаемая профессиональными компьютерными лингвистами. Также имеется обширная коллекция учебных пособий, часто задаваемых вопросов и т. Д. Я настоятельно рекомендую его.
Ниже приведен простой шаблон в коде Python для проблемы, поднятой в вашем Вопросе; хотя это шаблон, который он запускает - предоставьте любой текст в виде строки (как я это сделал), и он вернет список частот слов, а также ранжированный список этих слов в порядке «важности» (или пригодности в качестве ключевых слов). ) согласно очень простой эвристике.
Ключевые слова для данного документа (очевидно) выбираются среди важных слов в документе, т. Е. Тех слов, которые могут отличить его от другого документа. Если у вас не было априори знаний о предмете текста, общепринятым методом является вывод о важности или значении данного слова / термина из его частоты или важности = 1 / частота.
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())