#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.