У меня есть сообщения электронной почты в кадре данных 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.]
Вы можете попробовать выполнить следующую функцию, в которой вы можете использовать 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
.