在 pandas 数据框中形成单词的二元组

Pyt*_*bie 4 python nltk n-gram pandas

我一直在尝试将包含已标记化单词的 pandas 数据框转换为二元组,但我没有成功。我尝试了多个代码,但我要么不断收到错误消息,要么收到奇怪的答案。我大约两周前才开始使用 python,我真的很挣扎。任何帮助,将不胜感激。谢谢

这是我到目前为止所尝试过的。

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()
Run Code Online (Sandbox Code Playgroud)

在哪里

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]

Run Code Online (Sandbox Code Playgroud)

我想要的是

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)...
Run Code Online (Sandbox Code Playgroud)

但我得到的是

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
Run Code Online (Sandbox Code Playgroud)

sop*_*ros 6

此输出的原因隐藏在您正在应用的 lambda 函数体内:

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

我相信你应该做的是而不是应用ngrams(x,2)do list(ngrams(row,2)),这会摆脱你在答案中得到的生成器,并为你提供单词级别而不是字母级别的 ngram:

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

另一件事是,在不包含的情况下访问数据帧中的值list也会泄露函数的结果ngrams