所以我试图在pandas数据帧列上使用nltk Stanford POS标记器。它是一列字符串,我试图提取每个字符串中的名词数量。这就是我所拥有的:
from nltk.tag.stanford import POSTagger
from collections import Counter
import os
java_path = "C:/Program Files (x86)/Java/jre1.8.0_45/bin/java.exe"
os.environ['JAVAHOME'] = java_path
st = POSTagger('.../stanford-postagger-2015-04-20/models/english-left3words-distsim.tagger',
'.../stanford-postagger-2015-04-20/stanford-postagger.jar')
def noun_count(x):
listoflists = st.tag(x.split())
flat = [y for z in listoflists for y in z]
POS = [row[1] for row in flat]
c = Counter(POS)
nouns = c['NN']+c['NNS']+c['NNP']+c['NNPS']
return nouns
然后我尝试使用apply在数据帧上运行它来创建一个新列。
df['noun_count'] = df['string'].apply(lambda row: noun_count(row),1)
它确实有效......过了一会儿。比如,至少一个小时,可能更长,我在那之后就停止了观看。有没有办法加快速度?我注意到的是它似乎调用.jar文件并为每个条目关闭它,其中我有很多(任务管理器一直显示java启动和停止)。任何使这项工作更快的想法?