Регулярное выражение занимает слишком много времени; у кого-нибудь есть предложение по ускорению этого? - PullRequest
1 голос
/ 20 марта 2019

Итак, я пытаюсь сопоставить регулярное выражение с абзацем для анализа настроений, но tqdm говорит, что это может занять около 300 часов. Мне было интересно, если у кого-то есть критика о том, что я мог бы сделать, чтобы улучшить работу моих RE

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

regex_neg = ((a lie)|(abandon)|(abas)|(abattoir)|(abdicat)|(aberra)|(abhor)|(abject)|(abnormal)|(abolish)|(abominab)|(abominat)|(abrasiv)|(absent)|(abstrus)|(absurd)|(abus)|(accident)|(accost)|(accursed)|(accusation)|(accuse)|(accusing)|(acerbi)|(ache)|(aching)|(achy)|(acomia)|(acrimon)|(adactylism)|(addict)|(admonish)|(admonition)|(adulterat)|(adultery)|(advers)|(affectation)|(affected)|(affected manner)|(afflict)|(affright)...)

Вот функция, которую я использую для соответствия основам в абзацах

def neg_stems(paragraph):
    stem_list = []
    i = " ".join(paragraph)
    for n in re.finditer(regex_neg, i):
        if n.group():
            stem_list.append(n.group())
    return json.dumps(stem_list)

И, наконец, вот только общий вывод, который я получаю

neg_stems(["the king abdicated the throne in an argument where he was angry, but his son was pretty happy about it","I hate cats but love hedgehogs"])

> ["abdicat", "argument", "anger", "hate"]

Я просто пытаюсь подсчитать количество отрицательных слов, как определено семантическим словарем в regex_neg, но ~ 300 часов - это слишком много, и даже тогда это просто оценка.

У кого-нибудь есть предложения о том, что я мог бы сделать, чтобы попытаться ускорить этот процесс?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...