формирование биграмм слов в панде - PullRequest
0 голосов
/ 14 февраля 2019

Я пытался преобразовать фрейм данных pandas, содержащий уже токенизированные слова, в биграммы, но мне это не удалось.Я пробовал несколько кодов, но либо получаю сообщения об ошибках, либо странные ответы.Я начал использовать Python только около 2 недель назад, и я действительно борюсь с этим.Любая помощь будет оценена.Спасибо

Это то, что я пробовал до сих пор.

from nltk.util import ngrams

generic_tweets['bigrams'] = generic_tweets['tweet'].apply(lambda row: list(map(lambda x:ngrams(x,2), row)))   
generic_tweets['bigrams'].head()

где

generic_tweets['tweet'].head() 

0         [awww, thats, bummer, shoulda, got, david, car...
1         [upset, that, he, cant, update, his, facebook,...
2         [dived, many, time, ball, managed, save, rest,...
3            [whole, body, feel, itchy, like, it, on, fire]
4         [no, it, not, behaving, at, all, im, mad, why,...
5                                        [not, whole, crew]
6                                               [need, hug]

что я хочу

0         [(awww, thats), (thats, bummer), (bummer, shoulda)...
1         [(upset, that), (that, he), (he, cant), (cant, update)...
2         [(dived, many), (many, time), (time, ball), (ball, managed)...

но я получаю

0    [<generator object ngrams at 0x000002A38014B84...
1    [<generator object ngrams at 0x000002A30BA0AB1...
2    [<generator object ngrams at 0x000002A3A9182B8...
3    [<generator object ngrams at 0x000002A3A918713...
4    [<generator object ngrams at 0x000002A3A91874F...
Name: bigrams, dtype: object

1 Ответ

0 голосов
/ 14 февраля 2019

Причина этого вывода скрыта в теле применяемой лямбда-функции:

generic_tweets['bigrams'] = generic_tweets['tweet'].apply(lambda row: list(map(lambda x:ngrams(x,2), row))) 

Я полагаю, что вам следует вместо применения ngrams(x,2) do list(ngrams(row,2)) получитьизбавьтесь от генераторов, которые вы получаете в ответе, и дайте вам нграммы на уровне слов вместо букв:

generi_tweets['bigrams'] = df['tweet'].apply(lambda row: list(nltk.ngrams(row, 2)))

Другое дело, что доступ к значениям из кадра данных без охвата list будетраскрыть результаты функции ngrams тоже.

...