Как преобразовать отрицания и отдельные слова с одинаковой повторяющейся буквой

#python-3.x #nlp #text-processing

#python-3.x #nlp #обработка текста

Вопрос:

У меня есть фрейм данных, в котором есть столбец с текстовыми данными. Я хочу удалить слова, которые ничего не значат, и преобразовать отрицания типа «не является» в «не является» из текстовых данных. Потому что, когда я удаляю знаки препинания, «isn’t» становится «isn t», и когда я удалю слова, содержащие буквы длиной менее 2, «t» будет удалено полностью. Итак, я хочу выполнить следующие 3 задачи — 1) преобразовать отрицания типа «isn’t» в «is not» 2) удалить слова, которые ничего не значат 3) удалить буквы длиной менее 2, например, столбец df выглядит примерно так-

 user_id     text data column
    1        it's the coldest day
    2        they aren't going
    3        aa
    4        how are you jkhf
    5        v
    6        ps
    7       jkhf
  

Результат должен быть-

 user_id     text data column
    1        it is the coldest day
    2        they are not going
    3        
    4        how are you 
    5        
    6       
    7      
  

Как это реализовать?

Ответ №1:

 def is_repetitive(w):
    """Predicate, true for words like jj or aaaaa."""
    w = str(w)  # caller should have provided a single word as input
    return len(w) > 1 and all((c == w[0]  for c in w[1:]))
  

Передайте все слова в корпусе этой функции,
для накопления списка повторяющихся слов.
Затем добавьте такие слова в свой список стоп-слов.

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

1. можете ли вы сказать мне, каким будет синтаксис вышеупомянутой функции, если мне нужно передать ей столбец df, чтобы найти все такие слова. Я получаю KeyError: 0 при попытке вызвать эту функцию, передавая ей столбец df

2. Вы могли бы счесть df['word_col'].apply(is_repetitive) полезным. Или попросите другую функцию превратить слова в «» пустые, когда is_repetitive() значение True. Если вы передаете предложение, то вам понадобится функция, которая разбивает его на слова и отбрасывает повторяющиеся слова. pandas.pydata.org/pandas-docs/stable/reference/api /…

3. Предположим, если у меня есть df с идентификатором 2 столбцов и текстом. Записи в этих столбцах похожи на 1 aaa, 2 привет aaa, я хочу, чтобы результат был 1 (пустой) 2 привет

4. Если вы передаете предложение, то вам понадобится функция, которая разбивает его на слова и отбрасывает повторяющиеся слова. Может быть: return ' '.join([word for word in line.split() if not is_repetitive(word)]) . Или return ' '.join(filter(is_repetitive, line.split()))

Ответ №2:

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

2) Используйте стоп-слова из NLTK или spacy, чтобы удалить очевидные стоп-слова. В качестве альтернативы, передайте им свой собственный список стоп-слов (их стоп-слова по умолчанию — это такие вещи, как is, a, the).

3) Используйте базовый фильтр, если len<2 удаляет строку

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

1. …. Спасибо! что, если в столбце df есть такие слова, как eeeee, hh, jjjjj, в основном слова с одинаковой повторяющейся буквой. Я хочу удалить такие слова. как это сделать? И эти слова могли бы быть в сочетании с разумным словом, таким как hello aaa, становится просто hello.