Удалить пунктуацию из списка предложений во фрейме данных pandas

1

У меня есть сообщения электронной почты в кадре данных pandas. Перед применением send_tokenize я мог бы удалить знаки препинания, как это.

def removePunctuation(fullCorpus):
punctuationRemoved = fullCorpus['text'].str.replace(r'[^\w\s]+', '')
return  punctuationRemoved

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

sent_tokenize

def tokenizeSentences(fullCorpus):
sent_tokenized = fullCorpus['body_text'].apply(sent_tokenize)
return sent_tokenized

Пример кадра данных после tokenizing в предложения

[Nah I don't think he goes to usf, he lives around here though]                                                                                                                                                                                                                          

[Even my brother is not like to speak with me., They treat me like aids patent.]                                                                                                                                                                                                         

[I HAVE A DATE ON SUNDAY WITH WILL!, !]                                                                                                                                                                                                                                                  

[As per your request 'Melle Melle (Oru Minnaminunginte Nurungu Vettam)' has been set as your callertune for all Callers., Press *9 to copy your friends Callertune]                                                                                                                      

[WINNER!!, As a valued network customer you have been selected to receivea £900 prize reward!, To claim call 09061701461., Claim code KL341., Valid 12 hours only.]
Теги:
pandas
nlp

1 ответ

1
Лучший ответ

Вы можете попробовать выполнить следующую функцию, в которой вы можете использовать apply чтобы перебирать каждое слово в предложении и .join и проверять, находится ли символ в пунктуации, а затем .join. Кроме того, вам может понадобиться map так как вы хотите применить функцию к каждому предложению:

def tokenizeSentences(fullCorpus):
    sent_tokenized = fullCorpus['body_text'].apply(sent_tokenize)
    f = lambda sent: ''.join(ch for w in sent for ch in w 
                                                  if ch not in string.punctuation) 

    sent_tokenized = sent_tokenized.apply(lambda row: list(map(f, row)))    
    return sent_tokenized

Обратите внимание, что вам понадобится import string для string.punctuation.

  • 0
    Это сработало. Но убрал запятую между предложениями тоже. Похоже, «Даже мой брат не любит говорить со мной. Они относятся ко мне как к пособию по СПИДу». Как я могу оставить предложения разделенными для последующей обработки?
  • 0
    Под редакцией! Вы можете проверить, работает ли он для вас?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню