我有一个raw_corpus,我正在尝试使用用户定义的停止列表删除停用词(我编辑了nltk英语停用词文件)。我的停用词文件肯定有问题吗?
这里是输入pandas df raw_corpus:
这是我的代码:
#my own custom stopwords list
stoplist="/User/dlhoffman/nltk_data/corpora/stopwords/english"
#filter out stopwords
raw_corpus['constructed_recipe'] = raw_corpus['constructed_recipe'].apply(lambda x: [item for item in x if
item not in stoplist])
#running the code below verifies empty dataframe
#raw_corpus['constructed_recipe'] = raw_corpus['constructed_recipe'].apply(lambda x: [])
这是结果 - 显然不是我想要的!什么错了?:
答案 0 :(得分:1)
pd.Series.apply应该可以工作:
import pandas as pd
import re
df = pd.DataFrame([['this is the first test string'],
['this is yet another test'],
['this is a third test item'],
['this is the final test string']],
columns=['String'])
replace_set = {'this', 'is'}
df['String'] = df['String'].str.split(' ').apply(lambda x: ' '.join(k for k in x if k not in replace_set))
# df
# String
# 0 the first test string
# 1 yet another test
# 2 a third test item
# 3 the final test string
<强>解释强>
pd.Series.str.split
按空格分割单词,返回一系列列表,每个列表项都有一个单词。pd.Series.apply
接受一个lambda
(匿名)函数作为输入,有效地将一个函数应用于循环中系列中的每个项目。(k for k in x if k not in replace_set)
将k
的每个值作为if
条件的可迭代主题返回。' '.join
用于生成器表达式,以根据生成的单词形成字符串。