Подтвердить что ты не робот

Python Список Nграмм с частотами

Мне нужно получить самые популярные ngrams из текста. Длина Nграмм должна составлять от 1 до 5 слов.

Я знаю, как получить битраграммы и триграммы. Например:

bigram_measures = nltk.collocations.BigramAssocMeasures()
finder = nltk.collocations.BigramCollocationFinder.from_words(words)
finder.apply_freq_filter(3)
finder.apply_word_filter(filter_stops)
matches1 = finder.nbest(bigram_measures.pmi, 20)

Однако, я узнал, что scikit-learn может получать ngrams с различной длиной. Например, я могу получить ngrams длиной от 1 до 5.

v = CountVectorizer(analyzer=WordNGramAnalyzer(min_n=1, max_n=5))

Но WordNGramAnalyzer теперь устарел. Мой вопрос: как я могу получить N лучших словосочетаний из моего текста с длиной совпадений от 1 до 5. Также мне нужно получить FreqList из этих collocations/ngrams.

Могу ли я сделать это с помощью nltk/scikit? Мне нужно получить комбинации ngrams с различной длиной от одного текста?

Например, с использованием биграмм и триграмм NLTK, где многие ситуации, в которых мои триграммы включают мои битграммы, или мои триграммы являются частью более крупных 4 грамм. Например:

bitgrams: hello my триграммы: привет мое имя

Я знаю, как исключить биграммы из триграмм, но мне нужны лучшие решения.

4b9b3361

Ответ 1

Обновление

С scikit-learn 0.14 формат изменился на:

n_grams = CountVectorizer(ngram_range=(1, 5))

старый ответ

WordNGramAnalyzer действительно устарел, так как scikit-learn 0.11. Создание n-граммов и получение временных частот теперь объединены в sklearn.feature_extraction.text.CountVectorizer. Вы можете создать все n-граммы в диапазоне от 1 до 5 следующим образом:

n_grams = CountVectorizer(min_n=1, max_n=5)

Дополнительные примеры и информация можно найти в документации scikit-learn о извлечении текстовых функций.

Ответ 2

Если вы хотите сгенерировать необработанные ngrams (и подсчитать их сами, возможно), там также nltk.util.ngrams(sequence, n). Он будет генерировать последовательность nграмм для любого значения n. Он имеет опции для заполнения, см. Документацию.

Ответ 3

Глядя на http://nltk.org/_modules/nltk/util.html Я думаю, что под капотом nltk.util.bigrams() и nltk.util.trigrams() реализованы с использованием nltk.util.ngrams()