Как найти частоту ngram столбца в фрейме данных pandas?
Ниже приведен входной фрейм данных pandas, который у меня есть.
Я хочу найти частоту униграмм и биграмм. Пример того, что я ожидаю, показан ниже
Как это сделать с помощью nltk или scikit learn?
Я написал ниже код, который принимает строку в качестве входных данных. Как расширить его до серии / фрейма данных?
from nltk.collocations import *
desc='john is a guy person you him guy person you him'
tokens = nltk.word_tokenize(desc)
bigram_measures = nltk.collocations.BigramAssocMeasures()
finder = BigramCollocationFinder.from_words(tokens)
finder.ngram_fd.viewitems()
1 ответ:
Если ваши данные похожи на
import pandas as pd df = pd.DataFrame([ 'must watch. Good acting', 'average movie. Bad acting', 'good movie. Good acting', 'pathetic. Avoid', 'avoid'], columns=['description'])Вы можете использовать
CountVectorizerпакетаsklearn:from sklearn.feature_extraction.text import CountVectorizer word_vectorizer = CountVectorizer(ngram_range=(1,2), analyzer='word') sparse_matrix = word_vectorizer.fit_transform(df['description']) frequencies = sum(sparse_matrix).toarray()[0] pd.DataFrame(frequencies, index=word_vectorizer.get_feature_names(), columns=['frequency'])Что дает вам:
frequency good 3 pathetic 1 average movie 1 movie bad 2 watch 1 good movie 1 watch good 3 good acting 2 must 1 movie good 2 pathetic avoid 1 bad acting 1 average 1 must watch 1 acting 1 bad 1 movie 1 avoid 1EDIT
fitбудет просто "тренировать" ваш векторизатор : он будет расщеплять слова вашего корпуса и создавать с его помощью словарь. Затемtransformможет взять новый документ и создать вектор частоты на основе словаря векторизатора.Здесь ваш тренировочный набор-это ваш выходной набор, так что вы можете делать и то и другое одновременно. (
fit_transform). Поскольку у вас есть 5 документов, он создаст 5 векторов в виде матрицы. Вам нужен глобальный вектор, поэтому вы должны сделатьsum.EDIT 2
Для больших фреймов данных можно ускорить вычисление частот, используя:
frequencies = sum(sparse_matrix).data

Comments