Раньше я мог вычислять нграммы из одного списка, но теперь я хочу сгруппировать его по столбцу в кадре данных.
Когда я пытаюсь взять свой оригинальный фрагмент для списка и применить его к этому фрейму данных. Я продолжаю получать ошибку типа для "ожидаемой строки или байтовоподобного объекта". Я попробовал поискать в Google, и я не смог найти решение для этого.
Мой фрейм данных настроен как два столбца, с примерно 50 000 строк.
ID term
1 the cat jumped over
1 dog jumped over
1 dog jumped through
2 little black hat
2 little black shirt
2 the black shirt
3 is it snowing right now
3 is it raining right now
3 is it snowing tomorrow
3 is it raining today
Мой идеальный результат из этого кадра данных будут показаны нграммы (между двумя и четырьмя) и их частота. Так и должно быть примерно так.
Для 2 граммов:
ID Term
1 jumped over (2), dog jumped (2)
2 little black (2), black shirt (2)
3 is it (4)
Возможно ли это? Вот что у меня есть:
import pandas as pd
from collections import Counter
from nltk import ngrams, word_tokenize
from functools import partial
df = pd.read_csv('dataframe.csv', engine='python')
df.dropna()
for i in range (2,4):
_ngrams = partial(ngrams, n=i)
df['{}-grams'.format(i)] = df.groupby("id")["term"].apply(lambda x: Counter(_ngrams(word_tokenize(x))))