Как исправить регулярное выражение, чтобы поймать WhatsApp экспортированный текстовый заголовок с мобильным и сочетание имен - PullRequest
0 голосов
/ 24 января 2019

Я экспортировал чат whatsapp, чтобы использовать его для машинного обучения, но у меня возникли проблемы с растровыми символами не-utf-8 и очисткой заголовка.некоторые заголовки номера мобильного телефона, некоторые имя.Не удалось найти регулярное выражение для соответствия всем.Также, как уже упоминалось, я не смог найти способ разобрать этот файл, так как я получаю сообщение об ошибке при разборе растровых изображений с кодировкой utf-8 при открытии файла, например

with open("file.txt", "r", encoding="utf-8") as f:

Пример экспорта в Whatsap:

10/14/18, 14:49 - ‪+90 999 555 55 55‬: <Media omitted>
10/14/18, 14:49 - ‪+90 999 555 55 55‬: ??
10/14/18, 15:23 - Mehmet Senturk: <Media omitted>
10/14/18, 15:57 - Mehmet Senturk: <Media omitted>
10/14/18, 16:00 - Gülden Çağıl ??: done
10/14/18, 16:05 - Mehmet Senturk: ?
10/14/18, 17:08 - Niyazi Şakiroğlu: Beyler yeni app hazır
10/14/18, 17:08 - Niyazi Şakiroğlu: Duuple AppStore ve playstore da yayında
10/14/18, 17:08 - Niyazi Şakiroğlu: Duuple
10/14/18, 17:08 - Niyazi Şakiroğlu: Görüşleriniz bekliyorum
10/14/18, 17:09 - Niyazi Şakiroğlu: <Media omitted>
10/14/18, 18:47 - ‪+90 999 999 99 99‬: Cok guzel app, hayirli olsun :))
10/14/18, 18:47 - ‪+90 999 999 70 99‬: Herkes indirmeli
10/14/18, 18:52 - ‪+90 999 999 99 99‬: İndirdim, birazdan inceleyip yorum yaparım....

Я хочу очистить как:

done
Beyler yeni app hazır
Duuple AppStore ve playstore da yayında
Duuple
Görüşleriniz bekliyorum
Cok guzel app, hayirli olsun :))
Herkes indirmeli
İndirdim, birazdan inceleyip yorum yaparım....

У меня есть следующие шаблоны регулярных выражений, но это не помогает.

mediaPattern = r"(\<Media omitted\>)" # Because it serves no purpose
regexMedia = re.compile(mediaPattern, flags=re.M)

dateAndTimepattern = r"(\d+\/\d+\/\d+)(,)(\s)(\d+:\d+)(\s)(\-)(\s+)[0-9A-Za-züğışçöÜĞİŞÇÖ\s]+[^\w]+(\:)?"
regexDate = re.compile(dateAndTimepattern, flags=re.M)

nonchar_pattern = r"[^\w\s<>:\-\/\,üğşçöıÜĞİŞÇÖ]+"
regexnonchar = re.compile(nonchar_pattern, flags=re.M)

Большое спасибо за вашу помощь

1 Ответ

0 голосов
/ 25 января 2019

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

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

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

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

т.е. Я бы использовал это выражение:

pattern = ^([0-9]{2}\/[0-9]{2}\/[0-9]{2}),(\s[0-9]{2}:[0-9]{2})\s-\s(.*?):\s(.*)$

, который помещает дату, время, имя пользователя и полезную нагрузку в четыре группы захвата. e.g.:

import re

rx = re.compile( "([0-9]{2}\/[0-9]{2}\/[0-9]{2}),\s([0-9]{2}:[0-9]{2})\s-\s(.*?):\s(.*)" )

with open( "file.txt", "r", encoding="utf-8" ) as fh:
    line = fh.readline()
    while line:
        data = rx.match( line ).group( 1, 2, 3, 4 )
        print( "date :", data[0], "time :", data[1], "user :", data[2], "msg  :", data[3] )
        line = fh.readline()

дает

date : 10/14/18 time : 15:57 user : Mehmet Senturk msg  : <Media omitted>
date : 10/14/18 time : 16:00 user : Gülden Çağıl ?? msg  : done
date : 10/14/18 time : 16:05 user : Mehmet Senturk msg  : ?
date : 10/14/18 time : 17:08 user : Niyazi Şakiroğlu msg  : Beyler yeni app hazır

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

Попытка сделать обе вещи одновременно потребует очень грязного регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...