使用用户提供的列表从 pandas df 中删除停用词
remove stopwords from pandas df with user-supplied list
我有一个 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: [])
这是结果 - 显然不是我想要的!怎么了?:
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)
returns k
的每个值作为可迭代对象 if
条件。
' '.join
用于生成器表达式,从生成的单词中形成一个字符串。
我有一个 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: [])
这是结果 - 显然不是我想要的!怎么了?:
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)
returnsk
的每个值作为可迭代对象if
条件。 ' '.join
用于生成器表达式,从生成的单词中形成一个字符串。