Удалить бессмысленные слова из столбца фрейма данных

#python #nlp #text-processing

#python #nlp #обработка текста

Вопрос:

Столбец dataframe содержит предложения, состоящие из нескольких слов из трех и двух букв, которые не имеют смысла. Я хочу найти все такие слова в столбце dataframe, а затем удалить их из столбца dataframe. df-

 id      text
1       happy birthday syz
2       vz
3       have a good bne weekend 
  

Я хочу 1) найти все слова длиной менее 3. (это должно вернуть syz, vz, bne)
2) удалите эти слова
(Обратите внимание, что стоп-слова уже удалены, поэтому такие слова, как «a», «the», теперь не существуют в столбце фрейма данных, приведенный выше фрейм данных — это просто пример)

Я попробовал приведенный ниже код, но он не работает

 def word_length(text):
    words = []
    for word in text:
        if len(word) <= 3:
            words.append(word)
    return(words)

short_words = df['text'].apply(word_length).sum()
  

вывод должен быть-

 id      text
1       happy birthday 
2       
3       have good weekend 
  

Комментарии:

1. Почему «a» все еще находится в ожидаемом выводе?

2. Хорошо ли указывать бессмысленные слова, используя длину символов?

3. @ tripleee Я обновил его.

4. @Yusufsn Если у вас есть какой-либо другой эффективный способ сделать это, я определенно могу это реализовать. Я просто подумал, что это может быть одним из способов сделать это.

Ответ №1:

Вы применяете функцию к столбцу последовательностей слов, в то время как фактические данные представляют собой столбец строк (последовательности символов) Вам также следует удалить .sum(), поскольку он полностью избыточен.

Перепишите функцию, которую вы применяете в форме:

  def filter_short_words(text):
    return "".join([for w in text.split() if len(w) > 3])
  

Это работает.

Комментарии:

1. и вызвать функцию следующим образом- short_words = df['text'].apply(filter_short_words).sum() ? вызов функции, подобной этой, выдает ошибку — объект ‘list’ не имеет атрибута ‘split’

2. Нет, вам не нужно .sum() отвечает за суммирование числовых значений столбца. Используйте результат = df[‘text’].apply(filter_short_words)

3. Это выдает мне ту же ошибку, что и у объекта списка, у которого нет разделения атрибутов

4. проверьте тип столбца, к которому вы применяете. если это строка (вы привели пример данных со строковым столбцом), то моя функция работает. если это список (кажется, что фактические данные являются списком), то удалите .split()

5. это работает… но мне понадобилась бы небольшая модификация для this…is возможно ли добавить эти слова в пустой список, а затем вернуть этот список? Если да, то как это сделать?