Как указать, что условие применяется только к двум переменным, а другое - к другим переменным?

Я написал небольшой код, который помогает мне извлекать отрицательные предложения. Проблема, с которой я столкнулся, заключается в том, что я написал другой тип шаблона, и для одного конкретного шаблона мне нужно проверить последний атрибут, чтобы увидеть, присутствует ли значение в лексиконе. Проблема заключается в том, где есть другие шаблоны, которые заканчиваются тем же атрибутом ("прил").

Есть ли способ улучшить этот код, чтобы указать, что первое условие "если" применяется только к шаблону 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)

Итак, как написано в коде для проверки условия "если" для всего шаблона, я хотел бы иметь возможность указать первое "если" только для двух шаблонов.

0 ответов

Другие вопросы по тегам