使用 pandas 数据框应用函数 - POS 标记器计算时间

Apply function with pandas dataframe - POS tagger computation time

我对 pandas 的应用函数很困惑。我有一个大数据框,其中一列是一列字符串。然后我使用一个函数来计算词性出现的次数。我只是不确定设置应用语句或函数的方式。

def noun_count(row):
    x = tagger(df['string'][row].split())
    # array flattening and filtering out all but nouns, then summing them
    return num

所以基本上我有一个类似于上面的功能,我在输出单个数字(名词数量)的列上使用 POS 标记器。我可能会重写它以针对不同的词性输出多个数字,但我无法绕过 apply.

我很确定我没有正确安排任何部分。例如,我可以 运行 noun_count[row] 并获得任何索引的正确值,但我无法弄清楚如何使它与 apply 我的设置方式一起工作。基本上我不知道如何将行值传递给应用语句中的函数。

df['num_nouns'] = df.apply(noun_count(??),1)

抱歉,这个问题到处都是。那么我该怎么做才能得到像

这样的简单结果
      string     num_nouns
0      'cat'             1
1 'two cats'             1

编辑: 所以我设法通过使用列表理解来使某些东西起作用(有人发布了一个答案,但他们已经删除了它)。

df['string'].apply(lambda row: noun_count(row),1)

需要调整我的功能:

def tagger_nouns(x):
    list_of_lists = st.tag(x.split())
    flat = [y for z in list_of_lists for y in z]
    Parts_of_speech = [row[1] for row in flattened]
    c = Counter(Parts_of_speech)
    nouns = c['NN']+c['NNS']+c['NNP']+c['NNPS']
    return nouns

我使用的是 Stanford 标注器,但我在计算时间上遇到了很大的问题,而且我使用的是左 3 词模型。我注意到它一次又一次地调用 .jar 文件(java 在任务管理器中不断打开和关闭),也许这是不可避免的,但 运行 确实花费了太多时间。有什么办法可以加快速度吗?

我不知道 'tagger' 是什么,但这是一个简单的示例,其中的字数统计应该或多或少以相同的方式工作:

f = lambda x: len(x.split())

df['num_words'] = df['string'].apply(f)

       string  num_words
0       'cat'          1
1  'two cats'          2