【发布时间】:2020-03-27 20:48:06
【问题描述】:
我必须将一些多个函数应用于一列以获取二元组列表,但是以我目前使用的方式使用 apply 函数非常慢。有没有办法提高速度?
def remove_stop_words(text):
cleantext = text.lower()
cleantext = ' '.join(re.sub(r'[^\w]', ' ', cleantext).strip().split())
filtered_sentence= ''
for w in word_tokenize(cleantext):
if w not in stop_words:
filtered_sentence = filtered_sentence + ' ' + w
return filtered_sentence.strip()
def lemmatize(text):
lemma_word = []
for w in word_tokenize(text.lower()):
word1 = wordnet_lemmatizer.lemmatize(w, pos = "n")
word2 = wordnet_lemmatizer.lemmatize(word1, pos = "v")
word3 = wordnet_lemmatizer.lemmatize(word2, pos = ("a"))
lemma_word.append(word3)
return ' '.join(lemma_word)
def get_ngrams(text, n ):
n_grams = ngrams(word_tokenize(text), n=2)
return [ ' '.join(grams) for grams in n_grams]
df['bigrams'] = df.headline.apply(lambda x: get_ngrams(lemmatize(remove_stop_words(x)),n=2))
编辑:(基于评论) 数据框 df 包含 2 列 - 1. 标题 2. 情绪得分
headline - 这是新闻标题,基本上是我必须在其上应用函数来获取标题的二元组的文本
情绪分数 - 我必须在 df 数据帧中也保留分数,因此需要在同一数据帧中获得一个名为“bigram”的列
【问题讨论】:
-
您将无法绕过
apply来应用这些功能。因此,除非您设法加快这些速度,否则您可能需要考虑multiprocessing,以并行化流程 -
你能分享所有相关的代码和数据吗?请参阅:minimal reproducible example.
-
我已经描述了数据框并添加了它的外观图片,希望它能给你足够的想法
-
@WhiteWalker 帖子本身中的数据,请不要作为图像。