Как преобразовать текст в фрейме данных панд (удалить пунктуацию, разделить текст на одно слово в каждой записи) - PullRequest
0 голосов
/ 13 декабря 2018

Я очищаю данные из источника .txt.Файл содержит сообщения WhatsApp в каждой строке, включая дату и время.Я уже разбил все это на один столбец, содержащий данные и информацию о времени df ['text], и один столбец, содержащий все текстовые данные df [' text_new '].Исходя из этого, я хочу создать облако слов .Вот почему мне нужно каждое слово из нескольких разговоров как отдельные записи в отдельных записях фрейма данных панд.

Мне нужна ваша помощь для дальнейшей очистки и преобразования этих данных.

Давайте предположим, что данныестолбец кадра df ['text_new'] это:

0    How are you? 
1    I am fine, we should meet this afternoon!
2    Okay let us do that. ?

Что я хочу сделать?

  1. Очистить все знаки препинания от текста.
  2. Разделить сообщения на отдельные слова, чтобы в одной записи кадра данных было только одно слово.
  3. Если это возможно, один смайлик следует рассматривать как одно слово.Если это невозможно, как их почистить?
  4. Сделать каждый текст строчными.Для этого уже есть решение, но было бы неплохо включить его в «код очистки».

Теперь, когда вы знаете три шага, которые я хочу выполнить, возможно, у кого-то есть чистыйи аккуратный способ сделать это.

Спасибо всем заранее!

1 Ответ

0 голосов
/ 13 декабря 2018

Использование:

import re

#https://stackoverflow.com/a/49146722
emoji_pattern = re.compile("["
                       u"\U0001F600-\U0001F64F"  # emoticons
                       u"\U0001F300-\U0001F5FF"  # symbols & pictographs
                       u"\U0001F680-\U0001F6FF"  # transport & map symbols
                       u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                       u"\U00002702-\U000027B0"
                       u"\U000024C2-\U0001F251"
                       "]+", flags=re.UNICODE)

df['new'] = (df['text_new'].str.lower() #lowercase
                           .str.replace(r'[^\w\s]+', '') #rem punctuation 
                           .str.replace(emoji_pattern, '') #rem emoji
                           .str.strip() #rem trailing whitespaces
                           .str.split()) #split by whitespaces

Образец :

df = pd.DataFrame({'text_new':['How are you?',
                               'I am fine, we should meet this afternoon!',
                               'Okay let us do that. \U0001f602']})


emoji_pattern = re.compile("["
                       u"\U0001F600-\U0001F64F"  # emoticons
                       u"\U0001F300-\U0001F5FF"  # symbols & pictographs
                       u"\U0001F680-\U0001F6FF"  # transport & map symbols
                       u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                       u"\U00002702-\U000027B0"
                       u"\U000024C2-\U0001F251"
                       "]+", flags=re.UNICODE)

import re


df['new'] = (df['text_new'].str.lower()
                           .str.replace(r'[^\w\s]+', '')
                           .str.replace(emoji_pattern, '')
                           .str.strip()
                           .str.split())
print (df)
                                    text_new  \
0                               How are you?   
1  I am fine, we should meet this afternoon!   
2                     Okay let us do that. ?   

                                                new  
0                                   [how, are, you]  
1  [i, am, fine, we, should, meet, this, afternoon]  
2                         [okay, let, us, do, that] 

РЕДАКТИРОВАНИЕ:

df['new'] = (df['text_new'].str.lower()
                           .str.replace(r'[^\w\s]+', '')
                           .str.replace(emoji_pattern, '')
                           .str.strip())
print (df)
                                    text_new  \
0                               How are you?   
1  I am fine, we should meet this afternoon!   
2                     Okay let us do that. ?   

                                       new  
0                              how are you  
1  i am fine we should meet this afternoon  
2                      okay let us do that 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...