2015-05-15 2 views
0

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

syn = [re.sub(r'\b' + form + r'\b', '', name).strip() 
      for form in self.forms 
      if re.search(r'\b' + form + r'\b', name)] 

Однако это довольно медленно, так как существует несколько сотен юридических форм. Есть ли способ лучше?

+1

Этот вопрос лучше подходит для codereview.stackexchange.com – IanAuld

+0

@IanAuld Как мне перенести? – kutschkem

+0

Я считаю, что мод должен будет это сделать – IanAuld

ответ

0

Вы должны предварительно скомпилировать свое регулярное выражение, так как их большое количество. По умолчанию Python memoizes regexes, но ваше большое количество будет превышать размер кеша.

Другим вариантом может быть токенизация строки компании, поскольку она, вероятно, не длинна. Затем проверьте каждый токен на set, содержащий ваши формы. Затем присоедините маркеры в конце.

self.forms = (...) 
tokens = company.split(' ') 
return ' '.join([ t for t in tokens if t not in self.forms ]) 
+0

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

Смежные вопросы