Как я могу ускорить применение Pandas с помощью Regex? - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь найти точное соответствие для ключевых слов 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)
...