Я пытаюсь 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.