Регулярное выражение применяется неправильно, поскольку я пытаюсь переписать фрагмент с помощью панд - PullRequest
0 голосов
/ 13 июня 2018

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

with open(filename, 'r') as csvfile:
    # creating a csv reader object
    csvreader = csv.reader(csvfile)

    # extracting field names through first row
    fields = csvreader.next()

    # extracting each data row one by one
    for row in csvreader:
        title.append(row[25])
        line = re.sub(r'[.,"!]+', '', row[25], flags=re.MULTILINE)  # removes the characters specified
        line = re.sub(r'^RT[\s]+', '', line, flags=re.MULTILINE)  # removes RT
        line = re.sub(r'https?:\/\/.*[\r\n]*', '', line, flags=re.MULTILINE)  # remove link
        line = re.sub(r'[:]+', '', line, flags=re.MULTILINE)
        line=(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)", " ", line,flags=re.MULTILINE))
        line = filter(lambda x: x in string.printable, line)  # filter non-ascii characers
        synopses.append(line)

Теперь, используя библиотеку панд.Я перевел приведенный выше код следующим образом:

input_data = pd.read_csv(filename)
input_posts = input_data["Post Data"]

input_posts = input_data["Post Data"].apply(lambda str : re.sub(r'[.,"!]+', '', str, flags=re.MULTILINE))
input_posts = input_data["Post Data"].apply(lambda str : re.sub(r'^RT[\s]+', '', str, flags=re.MULTILINE))
input_posts = input_data["Post Data"].apply(lambda str : re.sub(r'https?:\/\/.*[\r\n]*', '', str, flags=re.MULTILINE))
input_posts = input_data["Post Data"].apply(lambda str : re.sub(r'[:]+', '', str, flags=re.MULTILINE))
input_posts = input_data["Post Data"].apply(lambda str : re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)", " ", str,flags=re.MULTILINE))
input_posts = input_data["Post Data"].apply(lambda str : filter(lambda x: x in string.printable, str))

print(input_posts)

Проблема в том, что последний столбец в input_posts по-прежнему состоит из https://... URL, хотя я пытался их удалить.Кроме того, я не уверен, что это лучший способ перевести код, используя панд, где я использовал несколько лямбда-функций.Что-то не так в примененном регулярном выражении / или в последовательности, в которой применяется регулярное выражение?

Пример ожидаемого результата:

@ PRNcnsmr: SK-IIпредставляет смелый и нефильтрованный взгляд на красоту благодаря своему первому в истории #BareSkinProject с @ChloeGMoretz https://abc

необходимо удалить ссылку https://abc, чтобы получить

@PRNcnsmr: SK-II представляет смелый и неотразимый взгляд на красоту благодаря своему первому в истории #BareSkinProject с @ ChloeGMoretz

1 Ответ

0 голосов
/ 13 июня 2018

Вы применяете каждое преобразование к input_data["Post Data"], вместо этого вам, вероятно, нужно сделать input_data = input_data.apply(...) для каждого преобразования после первого:

input_posts = input_data["Post Data"].apply(...)
input_posts = input_posts.apply(...)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...