Удалите повторяющиеся специальные символы, используя регулярное выражение, если оно присутствует отдельно, но не в окружении слов или цифр - PullRequest
0 голосов
/ 26 марта 2020

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

P!nk
A$AP

является товарным знаком для двух отдельных исполнителей. Я хочу удалить отдельные и повторяющиеся специальные символы, такие как

whatt??
This is Good. I want both dots removed.
I'm thinking....

, но не хочу удалять #hashtag_for_life или что-то подобное

Я использовал

re.sub(r'([\W_])\1+',' ','hi my % na$me is @shady #for_life')

но не в индивидуальном. Может кто-нибудь, пожалуйста, предоставьте решение.

РЕДАКТИРОВАТЬ: ПРИМЕР

Как я могу преобразовать

'p!nk & A$AP are 2 singers..... what? are the b0th rappers? ? ? NO!! #singer ##rapper @shady'

в

'p!nk A$AP are singers what are the b0th rappers NO #singer #rapper @shady'

Это означает, что отдельные числа пропали, отдельные специальные символы пропали, завершающие специальные символы пропали, а повторяющиеся специальные символы заменены на отдельные специальные символы, которые находятся либо в середине, либо в начале слова.

1 Ответ

1 голос
/ 26 марта 2020

Не могли бы вы попробовать f0llowing:

import re
str = 'p!nk & A$AP are 2 singers..... what? are the b0th rappers? ? ? NO!! #singer ##rapper @shady'

str = re.sub(r'(?<=\s)[\W\d](?=(\s|$))', '', str)
str = re.sub(r'(?<=\w)\W+(?=(\s|$))', '', str)
str = re.sub(r'(\W)\1+(?=\w)', r'\1', str)

print(str)

Вывод:

p!nk A$AP are singers what are the b0th rappers NO #singer #rapper @shady
  • (?<=\s)[\W\d](?=(\s|$)) соответствует одному не алфавитному или цифровому символу, окруженному пробелами или в конец строки.
  • (?<=\w)\W+(?=(\s|$)) соответствует одному не алфавитному символу, следующему за словом.
  • (\W)\1+(?=\w) соответствует двум или более последовательным неалфавитным символам, предшествующим слову.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...