Более эффективное регулярное выражение - PullRequest
0 голосов
/ 20 апреля 2020

Я анализирую около 200 000 документов (~ 1-3 ГБ каждый), чтобы удалить все не-алфавитные символы c, используя регулярное выражение, и сопоставить формат ввода для некоторого древнего фрагмента кода. Каждое слово / число должны быть разделены _.

Я разбил их на отдельные части, чтобы это работало, но я безуспешно пытался объединить выражения в одно.

Как мне соединить части вместе?

Каковы соображения по объединению выражения?

def clean_document(raw_input):
    no_more_etf = re.sub(r'[^\x00-\x7F]+', '', raw_input)
    no_more_non_utf = re.sub(r'[\000-\011\013-\037]', '', no_more_etf)
    no_more_spaces = re.sub('\s+', '_', no_more_non_utf.strip())
    almost_there = re.sub('[^0-9a-zA-Z]+', '_', no_more_spaces)
    clean_string = almost_there.lower()
    return clean_string

Пример строки: '"where is the Vehicles 我是一群隨機人物 "countries"=>"35,214" "refinement"=>"3" 我的书在哪里"I\'m a dirty array object"=>"" "category_ids"=>"2,5,7,8" "data_size_units"=>"", "delivery_formats"=>"1,4" "delivery_® ® ®methods"=>"1,2", "price_currencies"=>"1" , "trial_currencies"=>"1", "categories"=>"2,10 ,19", "Delivery_growth_units ® ® ®"=>"", "trial_duration_units"=>"6", 私の本はどこですか "collection_time_units"=>"", "strategies"=>"2,3 , 4,6", "processing_time_units"=>"", "delivery_frequency_units" =>"", "subscription_duration_units "=>"6" ® ® ® ģ ģ ģ - GPS Place-Visits for Delivery Vehicles'

1 Ответ

1 голос
/ 20 апреля 2020

Вы можете выполнить все эти замены (кроме .strip ()), используя метод перевода стандартных строк (см. String.translate и string.maketrans https://docs.python.org/2/library/string.html).

Если вы не хотите использовать translate, вам будет полезно подготовить скомпилированные версии шаблонов замещения вне функции и использовать скомпилированные версии в вызовах re.sub (). Также использование одного re.sub () вместо нескольких также ускорит процесс.

...