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
триграммы: привет мое имя
Я знаю, как исключить биграммы из триграмм, но мне нужны лучшие решения.
Ответы
Ответ 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()