Я подозреваю, что вам нужны не только самые распространенные фразы, но и самые интересные словосочетания . В противном случае вы можете получить чрезмерную репрезентацию фраз, составленных из общих слов, и меньшее количество интересных и информативных фраз.
Для этого вам, по сути, нужно извлечь n-грамм из ваших данных, а затем найти те, которые имеют самую высокую точечную взаимную информацию (PMI). То есть вы хотите найти слова, которые встречаются вместе гораздо больше, чем вы ожидаете их случайно.
Инструкции по NLTK описывают, как это сделать, примерно в 7 строках кода, например ::
.
import nltk
from nltk.collocations import *
bigram_measures = nltk.collocations.BigramAssocMeasures()
trigram_measures = nltk.collocations.TrigramAssocMeasures()
# change this to read in your data
finder = BigramCollocationFinder.from_words(
nltk.corpus.genesis.words('english-web.txt'))
# only bigrams that appear 3+ times
finder.apply_freq_filter(3)
# return the 10 n-grams with the highest PMI
finder.nbest(bigram_measures.pmi, 10)