Как указать, что условие применяется только к двум переменным, а другое - к другим переменным?
Я написал небольшой код, который помогает мне извлекать отрицательные предложения. Проблема, с которой я столкнулся, заключается в том, что я написал другой тип шаблона, и для одного конкретного шаблона мне нужно проверить последний атрибут, чтобы увидеть, присутствует ли значение в лексиконе. Проблема заключается в том, где есть другие шаблоны, которые заканчиваются тем же атрибутом ("прил").
Есть ли способ улучшить этот код, чтобы указать, что первое условие "если" применяется только к шаблону 2 и шаблону 2bis, прежде чем сохранять их в следующем списке, а затем продолжить с другими условиями "если"?
Начало кода
import spacy
nlp = spacy.load("fr_core_news_md")
from spacy.matcher import Matcher
sentence = ["Voyons ce n'est pas mal ce que vous faites", "Vive la vie.",
" Vous n'êtes pas bien.",
"il est peu scrupuleux",
" il manque d'amour ou de conséridation",
" il est sans merci",
" il est trop cher",
"il aime manger",
"il doit vendre",
"Je n'aime pas",
"Je ne juge pas",
"ne m'aide pas"]
Определение шаблона
pattern1bis = [{},
{"LOWER": "mais","OP": "*"},
{}]
pattern1 = [{"LOWER": "mais","OP": "*"},
{"POS": "ADV","OP": "*"},
{"POS": "PRON","OP": "*"},
{"POS": "ADV"},
{"POS": "PRON","OP": "*"},
{"POS": "VERB"},
{"TEXT": {"IN": ["pas", "plus", "aucun", "aucunement", "point", "jamais", "nullement"]}}]
# pattern adjectiviaux
pattern2 = [{"POS": "ADV"},
{"POS": "AUX"},
{"LOWER": "pas"},
{"POS": "ADJ"},] # ADV
pattern2bis = [{"TEXT": "trop"},
{"POS": {"IN": ["ADJ", "NOUN", "VERB"]}}]
#Pattern modifieurs
pattern3 = [{"TEXT": {"IN": ["peu", "sans", "non"]}},
{"POS": {"IN": ["ADJ", "NOUN", "VERB"]}}]
pattern4 = [{"POS": "PRON", "OP": "*"},
{"TEXT": "manque"}]
matcher = Matcher(nlp.vocab)
lexique_pos =['bien', 'gentil']
lexique_neg = ['mauvais', 'dur', 'scrupuleux']
sent_extract=[] #list of extracted sentences with last attribute IN THE lexique
sent_not_extract=[] #list of extracted sentences with last attribute NOT IN THE lexique
sent_extract_other = []#list of extracted sentences which last attribute appeared not in pos and neg
for sent in sentence:
doc=nlp(sent)
#for tok in doc:
#print(tok.text, "\t", tok.lemma_, "-->", tok.dep_, "-->", tok.pos_)
matcher.add("matching_1", None, pattern1, pattern2, pattern3, pattern4)
matches= matcher(doc)
for match_id, start, end in matches:
span = doc[start:end].text.split()
# Explanations about the chained function above
#.text converts the span variable from spacy.token type to String
#split() function converts the string to a python list based on the space character
print("found match:", span)
if (span[-1] in lexique_pos): #checks if the last attribute is in the lexique
sent_extract.append(sent)
elif (span[-1] in lexique_neg):
sent_not_extract.append(sent)
else:
sent_extract_other.append(sent)
# Displays the list of extracted sentences
print('\nList of extracted negatives sentences')
print(sent_extract)
print('\nOther positive sentences')
print(sent_not_extract)
print('\nOther sentences')
print(sent_extract_other)
Итак, как написано в коде для проверки условия "если" для всего шаблона, я хотел бы иметь возможность указать первое "если" только для двух шаблонов.