从大量停用词中永久删除停用词

时间:2018-12-26 18:23:22

标签: python machine-learning nlp

我正在对数据集进行一些NLP,并且尝试删除停用词。

我没有使用内置停用词的nltk,而是使用了自定义停用词列表(使用不同语言的大约1万个单词)

我首先定义了以下功能

def clean_text(text):
    text = ''.join([word.lower() for word in text if word not in string.punctuation])
    tokens = re.split('\W+', text)
    text = [lm.lemmatize(word) for word in tokens if word not in stopwords]
    return text

然后我将其应用于数据框,如下所示:

df_train['clean_text'] = df_train['question_text'].apply(lambda x: clean_text(x))

我的问题是处理需要花费很长时间,所以有没有更快的方法?

1 个答案:

答案 0 :(得分:1)

包含对字符串的检查(x in data_structure),并且列表是线性的。这意味着对您的初始string.punctuation中的每个单个字符重复text,并且对每个令牌都重复stopwords。将它们都变成集合以使这些检查不变:

punct = set(string.punctuation)
stopwords = set(stopwords)

def clean_text(text):
    text = ''.join(char.lower() for char in text if char not in punct)
    tokens = re.split('\W+', text)
    text = [lm.lemmatize(word) for word in tokens if word not in stopwords]
    return text

一些参考文献:

  1. https://wiki.python.org/moin/TimeComplexity#set
  2. https://wiki.python.org/moin/TimeComplexity#list