Python удаление стоп-слов (pandas dataframe): вывод совпадает с вводом - PullRequest
1 голос
/ 09 января 2020

Совершенно новый новый python и кодирование шли хорошо, но врезались в стену, пытаясь удалить стоп-слова из моего кадра данных, несмотря на то, что это казалось бы легкой задачей. Так что, возможно, простой вопрос.

Код приведен ниже, но я перепробовал множество вариантов, основанных на рекомендациях Youtube и Stackoverflow. Когда я запускаю код, я не получаю ошибки, все запускается, но мой вывод 'token_text_nostop' точно такой же, как и ввод 'token_text'.

Данные 'token_text' были удалены с веб-сайта, токенизированы, нет прописные буквы, без чисел, без знаков препинания, немецкие акценты и т. д. c ... как это: ['vibrierende', 'körperöffnungen', 'rückgriff' ...

Кажется, работает функция stop_word (проверено это по простому тексту). Поэтому я предполагаю, что либо я неправильно выполняю итерацию по фрейму данных, передавая ему неправильные данные (тип), либо кодировка (или немецкий язык) не позволяет ему работать должным образом, так как я видел учебные пособия, которые выглядят почти идентично это и работает отлично.

Заранее спасибо за любые советы! Рад предоставить больше информации, если это необходимо.

df = pd.read_csv('TAZ_tokens.csv', header=0, encoding = 'utf-8', dtype={'text':str})

stop_words = set(stopwords.words('german'))

def remove_stopwords(txt):
    txt_nostop = ''.join([w for w in txt if w not in stop_words])
    return txt_nostop

df['token_text_nostop'] = df['token_text'].apply(lambda x: remove_stopwords(x))

1 Ответ

0 голосов
/ 09 января 2020

Обсуждение показало, что мой список изменился на строку. Решением было импортировать ast и преобразовать его обратно в список. Спасибо тем, кто помогает ... и усвоил несколько хороших общих уроков.

Финальный код выглядел примерно так:

df = pd.read_csv('TAZ_tokens.csv', header=0, encoding = 'utf-8')

import ast
df['tokenized_text'] = df.tokenized_text.apply(lambda s: list(ast.literal_eval(s)))

#Just to confirm change worked
type(df.loc[2, 'token_text']) 

stop_words = set(stopwords.words('german'))

def remove_stopwords(txt):
    txt_nostop = ''.join([w for w in txt if w not in stop_words])
    return txt_nostop

df['token_text_nostop'] = df['token_text'].apply(lambda x: remove_stopwords(x))```





...