Мой проект (не связанный с этим вопросом, просто контекст) является классификатором ML, я пытаюсь его улучшить и обнаружил, что когда я вырезал URL-адреса из предоставленного ему текста, некоторые URL-адреса были разбиты пробелами. Например:
https:// twitter.com/username/sta tus/ID
После того, как я удаляю ссылки, которые не разорваны, у меня остаются мысли вроде www website com. Я удалил те, которые имеют следующее регулярное выражение в Python:
tweet = re.sub('(www|http).*?(org |net |edu |com |be |tt |me |ms )','',tweet);
Я поставил пробел после каждого из них, потому что это происходит после обычной полоски и обработки текста (поэтому работать только с частями URL-адреса, разделенными пробелами), и теоретически мы должны собирать только остатки неработающей ссылки ... не что-то вроде
http website strangeTLD .... communication
Это не идеально, но это работает, однако я просто подумал, что могу попытаться упреждающе удалить URL-адреса только из твиттера, поскольку я знаю, что пробелы, которые нарушают обычную полосу URL, всегда будут в одних и тех же местах, надеясь, что это повысит точность моего классификатора? Это избавит вас от строки символов, которая появляется после ссылки ... в частности, изображений, а это большая часть моих данных.
В частности, есть ли способ выбрать объект, окружающий / после:
pic.twitter.com/
или, в соответствии с примером, который я привел ранее, выберите объект после имени пользователя, разбитого пробелом в статусе (я просто догадываюсь об этом регулярном выражении) ...
http.*?twitter.com/*?/sta tus/
Заранее спасибо! И для записи, мне дали этот набор данных для работы; Я не уверен, почему почти все URL-адреса разбиты на пробелы.
Не очень ясно ... Присутствуют ли пробелы в исходном наборе данных или они появились после ваших первых шагов обработки?
@ RizwanM.Tuman они присутствовали в исходном наборе данных, который мне дали; Сначала я не заметил и не пытаюсь вернуться и приспособиться к ним. Вот пример URL-адреса в твите, который не удаляется из-за пробела: https: // twitter.com/pappiness/stat us / 919752795280027648
Вы проверили мое решение? Разве это не было ясно или чем-то не так?
@FrancescoB. Еще не пробовал! Я скоро встречусь, чтобы попытаться получить исходный набор данных ... посмотреть, смогут ли они посмотреть, как они его получили, и полностью устранить проблему с пространством. Если нет, я приму решение и дам вам знать, как оно пойдет!
большой; в любом случае приведенное ниже решение также работает с пробелами, вставьте их в регулярное выражение и в currentText по мере необходимости






Да, то, о чем вы говорите, называется Позитивный взгляд назад и работает с (?<=...), где многоточие следует заменить на то, что вы хотите пропустить.
Например. если вы хотите выбрать все, что идет после username в https://twitter.com/username/status/ID, просто используйте
(?<=https://twitter\.com/username/).*
и вы получите status/ID, как вы можете видеть с этим живая демонстрация.
В этом случае мне пришлось избегать косой черты /, используя обратную косую черту, как того требуют спецификации Regex; Я также использовал Клини звездный оператор, то есть звездочку, чтобы сопоставить любое вхождение . (любой символ), как и вы.
Комбинация положительного просмотра назад указывает некоторый обязательный текст перед текущей позицией курсора; другими словами, он помещает курсор после выражения, которое вы ему скармливаете (если указанный текст существует).
Конечно, в вашем случае этого недостаточно, поскольку username будет не фиксированной строкой, а переменной. Это может быть дополнительным требованием, поскольку ретроспективный просмотр не работает с переменной длиной.
Так что можно просто пропустить www.twitter.com/
(?<=https://twitter\.com/).*
А затем через Python создайте подстроку
currentText = "username/status/ID"
result = currentText.split("/",1)[1] # returns status/ID
Протестируйте его в этом демонстрация (нажмите «Выполнить»); простое объяснение того, как это работает, содержится в ответе на этот вопрос (короче говоря, вы просто разделяете строку по первому символу косой черты).
В качестве примечания, пробелы / пробелы не допускаются в URL-адресах и при необходимости обычно кодируются как %20 или + (см., Например, ответ это). Другими словами, каждый полученный вами URL-адрес можно безопасно удалить без пробелов перед обработкой, так ... почему они этого не сделали?
потерялись в вашем описании ... можете резюмировать итоги? дайте несколько примеров входной строки и ожидаемого вывода