Удаление стоп-слов из большого списка стоп-слов, принимающих навсегда - PullRequest
0 голосов
/ 26 декабря 2018

Я выполняю некоторые НЛП для набора данных и пытаюсь удалить стоп-слова.

Я не использую встроенные стоп-слова nltk, и я использую собственный список стоп-слов (который составляет около 10 тыс. Слов в разныхязыки)

Сначала я определил приведенную ниже функцию

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 голосов
/ 26 декабря 2018

Содержит проверки (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...