NLTK应用于数据帧,如何遍历列表

时间:2016-04-01 17:39:37

标签: python-2.7 pandas nltk tokenize pos-tagger

提前道歉,因为这是我的第一个问题。我正在使用nltk来标记一系列来自我已加载到df的csv的推文。标记化工作正常,并将此类[[My,uncle,...]]输出到df中的单元格中。我想然后将POS标记器应用于df的整列的标记化文本。我使用下面的代码来做到这一点。我遇到困难的一句话是df['tagged'] = df['tokenized'].apply(lambda row: [nltk.pos_tag(row) for item in row])。我知道我正在迭代错误的元素(行与项目),但无法找出正确的方法。代码如下:

import pandas as pd
import numpy as np
import nltk
from nltk.tokenize import word_tokenize,wordpunct_tokenize
from nltk.tag import pos_tag
read_test = pd.read_csv("simontwittertest.csv")
df = read_test
df['tokenized'] = df['content'].apply(lambda row:    [nltk.wordpunct_tokenize(row) for item in row])
df['tagged'] = df['tokenized'].apply(lambda row: [nltk.pos_tag(row) for item in row])
print(df['tagged'])`

出于兴趣,我发现了一个pos_tag的小错误,它只适用于NLTK 3.1而不适用于NLTK 3.2(至少使用Python 2.7) 非常感谢`

1 个答案:

答案 0 :(得分:1)

如果要将lambda函数应用于行,则需要指定axis=1

df['tokenized'] = df['content'].apply(
    lambda row: [nltk.wordpunct_tokenize(row) for item in row], axis=1)
df['tagged'] = df['tokenized'].apply(
    lambda row: [nltk.pos_tag(row) for item in row], axis=1)