Как сделать «за» 1 oop эффективнее и быстрее? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь l oop в списке слов, чтобы извлечь предложения (строку), которая содержит специфицированное c слово.

Я придумал этот небольшой код:


import spacy.attrs
import spacy
from spacy.lang.fr import French
from spacy.tokenizer import Tokenizer
from spacy.util import compile_prefix_regex, compile_infix_regex, compile_suffix_regex

nlp = spacy.load("fr_core_news_md")
from spacy.matcher import Matcher
import itertools

sentences_list = ['je suis', 'je', 'tu as mal','sois au repos','laisse moi','ta tête','tu es là', 'tu es laid']
sentences_with_word []
for elt in sentences_list:
      doc = nlp(elt)
      #print(doc)
      for tok in doc:
        #print(tok.text, "-->", tok.lemma_, "-->", tok.dep_, "-->", tok.pos_)
        if tok.lemma_ in lexique :
          if doc not in sentences_with_word:
            sentences_with_word.append(doc)

У меня более 300 000k elt, и это заняло целую вечность. Как я могу сделать это более эффективно, чтобы сократить время.

sentences_other =[]
d_sent = {}
for sent in sentences_list:
      mytokens = nlp(sent)
      mytokens2 = [word.lemma_.lower().strip() for word in mytokens if word.pos_ != "SPACE"]
      d_sent[sent] = " ".join(mytokens2)

    #print(d_sent)

    for k, v in d_sent.items():
      for w in motif : 
        #print(word)
        if w in v:
          #print(w)
          if k not in sentences_other:
            sentences_other.append(k)

Оба кода выполняются, но занимают слишком много времени (обычно более часа), так как числа elt огромны. Вы знаете, как я могу сделать это более эффективно, чтобы сократить время?

Я использовал библиотеку Spacy.

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