Как найти нграммы по сгруппированному столбцу в Python - PullRequest
0 голосов
/ 10 апреля 2020

Раньше я мог вычислять нграммы из одного списка, но теперь я хочу сгруппировать его по столбцу в кадре данных.

Когда я пытаюсь взять свой оригинальный фрагмент для списка и применить его к этому фрейму данных. Я продолжаю получать ошибку типа для "ожидаемой строки или байтовоподобного объекта". Я попробовал поискать в 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))))
...