Я хотел бы оптимизировать код в Python , чтобы увеличить скорость обработки строк, и мне было интересно, если кто-то может помочь.
Я провел несколько тестов в Cython но я не особо доволен результатами.Мне интересно, можно ли оптимизировать обработку строк или, возможно, я не создал правильный код в Cython .В первом случае взаимодействие со списком строк и простым присваиванием переменной было в среднем примерно в 5 раз быстрее.В другом случае, когда я включил поиск подстроки, увеличение скорости вообще не происходило.
[TL; DR]
У меня есть большие корпуса, которые мне нужно обработать.В настоящее время в чистом Python я перебираю список строк в поисках подстроки и отфильтровываю те элементы (основные строки), которые не содержат данную подстроку.Я создал пару циклов for и надеялся на значительное увеличение скорости после преобразования кода в Cython .
Сначала я проверил, насколько бы быстро выполнялась простая итерация по двум спискам строкбыть, когда строки присвоены переменной:
Результаты:
[Cython][1]: 0.45067 sec
[Python][2]: 2.09907 sec
[Cython][1] approximately 4.5 times faster than [Python][2]
Код в Cython :
def start(itsstr, tokens):
cdef size_t s
cdef size_t t
cdef size_t ns = len(itsstr)
cdef size_t nt = len(tokens)
cdef unicode x
for s in xrange(ns):
for t in xrange(nt):
x = itsstr[s]
Python
def start(itsstr, tokens):
for s in itsstr:
for t in tokens:
x = s
Текущий основной код в Python ищет подстроки.Я протестировал увеличение скорости при поиске подстроки в Cython .Результаты следующие:
Результаты:
[Cython][1]: 7.13278 sec
[Python][2]: 8.7094 sec
[Cython][1] 1.2 times faster than [Python][2]
Код в Cython :
def start(itsstr, tokens):
cdef size_t s
cdef size_t t
cdef size_t ns = len(itsstr)
cdef size_t nt = len(tokens)
cdef unicode x
for s in xrange(ns):
for t in xrange(nt):
if tokens[t] in itsstr[s]:
x = itsstr[s]
Код в Python
def start(itsstr, tokens):
for s in itsstr:
for t in tokens:
if t in s:
x = s
Как вы видите, на самом деле никакого увеличения скорости не происходит.
Я думал о том, что я мог бы сделать в этот момент?Я не опытен в Cython .У меня есть хороший опыт в C / C ++.
Спасибо