Я пытаюсь найти точное соответствие для ключевых слов w1 и w2 в каждом абзаце из содержимого, которое было проанализировано с веб-сайта.w1 из списка 250 слов, а w2 из списка 150 слов, поэтому существует (250 * 150) различных комбинаций.На это сопоставление строк регулярного выражения в комбинации уходит около 1-2 секунд, поэтому, разумеется, для выполнения этого требуется довольно много времени.Какие уловки я могу использовать, чтобы ускорить процесс?Я пытаюсь использовать многопроцессорную обработку, но, похоже, никаких существенных улучшений не произошло.
def filterByKeyWordsinParagraph(self, row, w1, w2):
paragraphs = row['formatted_content']
paragraphs = [p.lower() for p in paragraphs]
regex = re.compile(r'^(?=.*\b{0}\b)(?=.*\b{1}\b).*$'.format(w1.lower(), w2.lower()))
out = [paragraph for paragraph in paragraphs if regex.search(" ".join(paragraph.split()))]
objectid = self.objectMap[w1]
elementid = self.elementMap[w2]
cols = ['URL', 'Content', 'Proximity', 'ObjectID', 'ObjectName', 'ElementID', 'ElementName']
if len(out) > 0:
return pd.Series([row['url'], row['content'], self.proximity, objectid, w1, elementid, w2], index=cols)
else:
return pd.Series([np.nan]*7, index=cols)
def matchByParagraph(self, obj, ele):
data = self.splitData
ddata = dd.from_pandas(data, npartitions=10)
s = ddata.map_partitions(lambda df: df.apply((lambda row: self.filterByKeyWordsinParagraph(row, obj, ele)), axis=1)).compute(scheduler='processes')
return s[pd.notnull(s['Proximity'])].reset_index(drop=True)