首页 > 解决方案 > 错误:从 jupyter notebook 运行函数时,“列表”对象不可调用

问题描述

我正在尝试阅读字典,然后附加以列出我在其中找到模式的元素,但我遇到了这个错误,我不知道为什么?我正在调用一个字典,为什么它的 sat 列表不可调用。


import spacy.attrs
from spacy.attrs import POS
import spacy
from spacy import displacy
from spacy.lang.fr import French
from spacy.tokenizer import Tokenizer
from spacy.util import compile_prefix_regex, compile_infix_regex, compile_suffix_regex
from spacy.lemmatizer import Lemmatizer
from spacy.matcher import Matcher, PhraseMatcher
nlp = spacy.load("fr_core_news_md") # 95.72 précision 


l_1_dict = {}
l_1 = [line.rstrip() for line in l_1]
l_1_dict = spacy_process(l_1)  #Spacyprocess return a dictionnary
phrases_extraites_avec_regles_cas_1 = extraction_pattern_pour_motivations_1(l_1_dict, liste_neg_F, liste_pos_F, liste_neg_A, liste_pos_A, liste_neg_D, liste_pos_D, liste_neg_P, liste_pos_P)

l_1_dict 的例子:

l_1_dict = {"Emaillé de références littéraires appropriées quoiqu'assez stéréotypées ('Erlkönig' de Goethe, 'The Raven' de Poe...), cette adaptation/mise en abyme du petit chaperon rouge ne cherche pas à faire peur, mais plutôt à instaurer une ambiance grâce à une photographie assez élaborée et un minimalisme bienvenu dans les effets spéciaux.": "emaillé de références littéraires appropriées quoiqu' assez stéréotypées ( ' erlkönig ' de goethe , ' the raven ' de poe ... ) , cette adaptation / mise en abyme du petit chaperon rouge ne cherche pas à faire peur , mais plutôt à instaurer une ambiance grâce à une photographie assez élaborée et un minimalisme bienvenu dans les effets spéciaux .", "En tant qu'adulte, je n'aime pas le style des dessins, contrairement à mon fiston, mais en revanche, je tiens à souligner que l'intrigue et les rebondissements sont dignes des meilleurs romans à suspense que j'ai lus.": "en tant qu' adulte , je n' aime pas le style des dessins , contrairement à mon fiston , mais en revanche , je tiens à souligner que l' intrigue et les rebondissements sont dignes des meilleurs romans à suspense que j' ai lus .", 'Un court passage, mais une scène culte.': 'un court passage , mais une scène culte .', "Son chef d'oeuvre reste Landcruising mais M.S.A.F.A.R.A est à peu prés aussi génial.": "son chef d' oeuvre reste landcruising mais m.s.a.f.a.r.a est à peu prés aussi génial .", "j'ai 3 chats, dont une de 12 ans, mais grâce à ce livre j'en apprend encore sur eux !": "j' ai chats , dont une de ans , mais grâce à ce livre j' en apprend encore sur eux !", '"C\'est un album certes plus glam qu\'Antichrist Superstar ou Holy Wood, mais Marilyn Manson s\'exprime tellement bien dans ce style... Un album a écouter si vous voulez decouvrir Marilyn Manson...et à preferer de loin au commercial """"The golden age of grotesque"""""""': '" c\' est un album certes plus glam qu\' antichrist superstar ou holy wood , mais marilyn manson s\' exprime tellement bien dans ce style ... un album a écouter si vous voulez decouvrir marilyn manson ... et à preferer de loin au commercial " " " " the golden age of grotesque " " " " " " "', '"""Ce film est remarquable en ce qu\'il donne tout à la fois un témoignage authentique et crédible sur un des plus grands scandales du XXe siecle,mais en élargissant le propos sur des questions absolument essentielles pour chacun et auxquelles la réponse est ô combien difficile,notamment""""qu\'aurais-je fait à la place du jeune coopérant?"""";""""et à la place de l\'officier belge?"""";""""comment peut-on avoir dit """"plus jamais ça""""après la deuxieme guerre mondiale,et ne pas avoir réagi face aux massacres du Rwanda?""""."': '" " " ce film est remarquable en ce qu\' il donne tout à la fois un témoignage authentique et crédible sur un des plus grands scandales du xxe siecle , mais en élargissant le propos sur des questions absolument essentielles pour chacun et auxquelles la réponse est combien difficile , notamment""""qu\' aurais - je fait à la place du jeune coopérant?"""";""""et à la place de l\' officier belge?"""";""""comment peut - on avoir dit " " " " plus jamais ça""""après la deuxieme guerre mondiale , et ne pas avoir réagi face aux massacres du rwanda ? " " " " . "', "on retrouve notamment l'anneau des Nibelungen), ce livre nous plonge ici dans des paysages magnifiques autant qu'irréels : seule carence : la division manichéenne bien/mal est par trop prononcée: mais c'est mythique !": "on retrouve notamment l' anneau des nibelungen ) , ce livre nous plonge ici dans des paysages magnifiques autant qu' irréels : seule carence : la division manichéenne bien / mal est par trop prononcée : mais c' est mythique !", "Donc très curieuse d'en savoir plus j'ai acheter le livre, je l'ai lu en 15 jours (tout en continuant à fumer) et 3 jours après la fin de ma lecture j'ai savouré ma dernière cigarette avec le plaisir d'en fumer une dernière et le plaisir de savoir que ce serait la dernière, voilà maintenant 6 mois que j'ai arrêté et tout va bien, même pas envi au contraire ça me dégoute, c'est super simple d'arrêter, le livre n'apprends rien d'autre que tout ce que l'on sait déjà mais c'est magique !!": "donc très curieuse d' en savoir plus j' ai acheter le livre , je l' ai lu en jours ( tout en continuant à fumer ) et jours après la fin de ma lecture j' ai savouré ma dernière cigarette avec le plaisir d' en fumer une dernière et le plaisir de savoir que ce serait la dernière , voilà maintenant mois que j' ai arrêté et tout va bien , même pas envi au contraire ça me dégoute , c' est super simple d' arrêter , le livre n' apprends rien d' autre que tout ce que l' on sait déjà mais c' est magique ! !", '"""Dennis Brown fut un chanteur prolifique, cet album n\' est pas très connu mais est probablement son ou un de ses meilleurs avec """"Joseph\'s coat of many colours"""" et """"Wolf and Leopards""""."': '" " " dennis brown fut un chanteur prolifique , cet album n \' est pas très connu mais est probablement son ou un de ses meilleurs avec " " " " joseph\' s coat of many colours " " " " et " " " " wolf and leopards " " " " . "', "Cette première saison est formidable : nous ne sommes pas encore tout à fait dans l'esprit soap opera, mais les sujets abordés ont une résonnance dans notre propre quotidien.": "cette première saison est formidable : nous ne sommes pas encore tout à fait dans l' esprit soap opera , mais les sujets abordés ont une résonnance dans notre propre quotidien ."}

错误

--------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-c3d6f893d947> in <module>
     27         #print(l_1_dict)
     28         #phrases_extraites_avec_regles_cas_0 = extraction_pattern_pour_motivations_0(l_1_dict, liste_neg_F, liste_pos_F, liste_neg_A, liste_pos_A, liste_neg_D, liste_pos_D, liste_neg_P, liste_pos_P)
---> 29         phrases_extraites_avec_regles_cas_1 = extraction_pattern_pour_motivations_1(l_1_dict, liste_neg_F, liste_pos_F, liste_neg_A, liste_pos_A, liste_neg_D, liste_pos_D, liste_neg_P, liste_pos_P)

~\Documents\tal\methodes\methodes_extraction_motivations_cas_1.ipynb in extraction_pattern_pour_motivations_1(dico, lexi1, lexi2, lexi11, lexi22, lexi_D, lexi_DD, lexi_P, lexi_PP)

TypeError: 'list' object is not callable

这里的代码,我通常工作,但现在它不工作并打印上面的错误

def extraction_pattern_pour_motivations_1(dico, lexi1, lexi2, lexi11, lexi22, lexi_D, lexi_DD, lexi_P, lexi_PP): # neg , pos
    list_token_pos = [] #list of the token found in the lexique
    list_token_neg = [] #list of the token found in the lexique
    list_token_not_found = [] #list of the token not found in the lexique

    ''' Définition des pattern '''
    
    '''
    # ADJ > PUNK > Mais > ADJ
    pattern0 = [{"POS": {"IN": ["VERB", "ADJ", "NOUN"]}},
                {"IS_PUNCT": True, "OP": "*"},
                {"LOWER": "mais"},
               {"POS": {"IN": ["VERB", "ADJ", "NOUN"]}} ]
      

    pattern0_tup = (pattern0, 1, 0, True)
    
    '''
    
    pattern0 = [ {"POS": {"IN": ["VERB", "ADJ","NOUN"]}},
                 {"LOWER": "mais"},
                 {"POS": "ADV"},
                {"POS": {"IN": ["ADJ", "VERB", "NOUN"]}}]
      

    pattern0_tup = (pattern0, 1, 0, True)
    
    
    
    pattern1 = [ {"POS": "ADJ"},
                {"POS": "NOUN"},
                {"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ"]}, "OP": "*"},
                 {"LOWER": "mais"},
                 {"POS": "ADV", "OP": "*"},
                {"POS": {"IN": ["ADJ", "VERB", "NOUN"]}}]
      

    pattern1_tup = (pattern1, 1, 0, True)
    
    
    pattern2 = [ {"LOWER": "mais"},
                {"POS": "PRON"},
        {"POS": "VERB"},
        {"POS": "ADV", "OP": "*"},
        {"POS": "ADJ"}]
      

    pattern2_tup = (pattern2, 1, 0, True)
    
    pattern3 = [ {"LOWER": "mais"},
                 {"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ"]}, "OP": "*"},
                {"POS": "PRON"},
        {"POS": "VERB"},
        {"POS": "ADV", "OP": "*"},
        {"POS": "ADJ"}]
      

    pattern3_tup = (pattern3, 1, 0, True)
    
    pattern4 = [ {"LOWER": "mais"},
                 {"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ"]}, "OP": "*"},
                {"POS": "DET"},
        {"POS": "NOUN"},
        {"POS": "VERB"},
        {"POS": "ADV", "OP": "*"},
        {"POS": "ADJ"}]
      

    pattern4_tup = (pattern4, 1, 0, True)
    
    
    pattern5 = [ {"LOWER": "mais"},
                 {"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ"]}, "OP": "*"},
                {"POS": "DET"},
                {"POS": "ADJ"},
        {"POS": "NOUN"}]
      

    pattern5_tup = (pattern5, 1, 0, None)
    
    
    pattern6 = [ {"LOWER": "mais"},
                 {"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ"]}, "OP": "*"},
                {"POS": "ADV", "POS": "?"},
                {"POS": "ADJ"}]
      

    pattern6_tup = (pattern6, 1, 0, True)
    
    
    pattern7 = [ {"LOWER": "mais"},
                 {"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ"]}, "OP": "*"},
                {"POS": "PRON"},
        {"POS": "VERB"},
        {"POS": "DET", "OP": "*"},
        {"POS": "ADV", "OP": "*"},
        {"POS": "ADJ"}]
      

    pattern7_tup = (pattern7, 1, 0, True)
    
    pattern8 = [ {"LOWER": "mais"},
                {"POS": "PRON"},
        {"POS": "VERB"},
        {"POS": "DET", "OP": "*"},
        {"POS": "ADV", "OP": "*"},
        {"POS": "ADJ"}]
      

    pattern8_tup = (pattern8, 1, 0, True)
    
    
    pattern9 = [ {"LOWER": "mais"},
                {"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ"]}, "OP": "*"},
                {"POS": "ADV"},
        {"POS": "DET", "OP": "*"},
        {"POS": "ADJ"}]
      

    pattern9_tup = (pattern9, 1, 0, True)
    
    
    pattern10 = [ {"LOWER": "mais"},
                  {"POS": "PRON"},
        {"POS": "VERB"},
        {"POS": "DET"},
        {"POS": "NOUN"},
        {"POS": "ADP"},       
        {"POS": {"IN": ["VERB", "ADJ","NOUN"]}}]

    pattern10_tup = (pattern10, 1, 0, True)
                
    pattern11 = [{"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ", 'SCONJ', 'CCONJ']}, "OP": "*"},
                {"LEMMA": {"IN": ["ne", "n'", "n"]}, "OP": "*"},
                {"POS": {"IN": ["VERB", "AUX"]}},
                {"LEMMA": {"IN": ["pas", "plus", "aucun", "rien", "jamais", "nullement", "non"]}, "OP": "*"},
                {"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ", 'SCONJ', 'CCONJ']}, "OP": "*"},
                {"LOWER": "mais"},
                 {"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ"]}, "OP": "*"},
                 {"POS": "ADV", "OP": "*"},
                 {"POS": "VERB", "OP": "*"},
                {"POS": {"IN": ["ADJ", "VERB","NOUN"]}}]
      

    pattern11_tup = (pattern11, 1, 0, True)
    
    
    pattern12 = [{"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ", 'SCONJ', 'CCONJ']}, "OP": "*"},
                {"LEMMA": {"IN": ["ne", "n'", "n"]}, "OP": "*"},
                {"POS": {"IN": ["VERB", "AUX"]}},
                {"LEMMA": {"IN": ["pas", "plus", "aucun", "rien", "jamais", "nullement", "non"]}, "OP": "*"},
                {"POS": {"IN": ["PRON", "PROPN","ADP", "DET","ADV", "AUX", "VERB", "NOUN", "ADJ", 'SCONJ', 'CCONJ']}, "OP": "*"},
                {"LOWER": "mais"},
                 {"POS": "VERB"},
                 {"POS": "DET"},
                 {"POS": "ADJ"},
                {"POS": "NOUN"} ]
      

    pattern12_tup = (pattern12, 1, 0, None)
    
    pattern13 = [{"POS": "DET"},
                 {"POS": "NOUN"},
                 {"POS": "VERB"},
                {"POS": "ADJ"},
                 {"LOWER": "mais"},
                 {"POS": "ADV", "OP": "?"},
                 {"POS": {"IN": ["ADJ", "VERB","NOUN"]}}] 
      

    pattern13_tup = (pattern13, 1, 0, None)

    pattern_list_tup =[pattern0_tup, pattern1_tup, pattern2_tup, 
                       pattern3_tup, pattern4_tup, pattern5_tup, pattern6_tup, 
                       pattern7_tup, pattern8_tup, pattern10_tup,
                      pattern13_tup, pattern12_tup, pattern9_tup, pattern10_tup] 
    # Tuple of pattern
    #pattern_list_tup =[pattern1_tup]
    pattern_name = ['zero', 'one','two','three','four', 'five', 'seven', 
                    'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirth', 'fourth']
    
    
    lenght_of_list = len(pattern_list_tup)
    #print('lenght', lenght_of_list)
    
    sentence_extract = [] 
    sentence_not_extract = [] 
    
    ''' Définition des lexiques '''
    
    # List of lexicon to use 
    list_of_lexicon = [[lexi1, lexi2], [lexi11, lexi22], [lexi_D, lexi_DD], [lexi_P, lexi_PP]]  #lexique neg, positif

    # index of the value of attribute to check in the lexicon
    
    value_of_attribute_av = [0, 0, 0, 0, 0, 0, 0, 0,0,0, 0, 0, 0, 0]
    value_of_attribute_ap = [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1] 
    value_of_attribute_mid_av = [3,3,3,3,3,3,3,3,3,3,3,3,3,3]
    value_of_attribute_mid_ap = [-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2] 
    
    for pat in range(0, lenght_of_list):
        #print(pat)
        matcher = Matcher(nlp.vocab)  
        matcher.add("matching_1", None, pattern_list_tup[pat][0])
        #print("Premier pattern", pat)
        #print(pattern_list_tup[pat][0])

        ''' lignes pour l'extraction '''
        for k, v in dico.items():
            #for k in file :
            doc = nlp(v)
            #doc = nlp(k)
            matches= matcher(doc)
            for match_id, start, end in matches:
                span = doc[start:end].lemma_.split()
                #print(f"{pattern_name[pat]} pattern found: {span}") 
                if (pattern_list_tup[pat][3]):
                    #print(pattern_list_tup[pat][0])
                    #print(pattern_list_tup[pat][1]) # 1
                    #print(pattern_list_tup[pat][2]) # 0
                    for i_list in list_of_lexicon:
                        if (span[value_of_attribute_av[pat]] in i_list[pattern_list_tup[pat][1]] 
                            and span[value_of_attribute_ap[pat]] in i_list[pattern_list_tup[pat][1]] ): 
                            #print("r", i_list[1])
                            if k not in sentence_extract:
                                sentence_extract.append(k)
                        elif (span[value_of_attribute_ap[pat]] in i_list[pattern_list_tup[pat][1]]): 
                            #print("r", i_list[1])
                            if k not in sentence_extract:
                                sentence_extract.append(k)        
                        else:
                            if k not in sentence_not_extract:
                                sentence_not_extract(k)
                else:
                    if (span[value_of_attribute_mid_av[pat]] in i_list[pattern_list_tup[pat][1]] and span[value_of_attribute_ap[pat]] in i_list[pattern_list_tup[pat][1]]): 
                        #print("r", i_list[1])
                        if k not in sentence_extract:
                            sentence_extract.append(k)
                    elif (span[value_of_attribute_mid_ap[pat]] in i_list[pattern_list_tup[pat][1]]): 
                        #print("r", i_list[1])
                        if k not in sentence_extract:
                            sentence_extract.append(k)        
                    else:
                        if k not in sentence_not_extract:
                                sentence_not_extract(k)

    #union = set().union(sentence_extract, sentence_extract_1, sentence_extract_2, sentence_extract_3)
                 
    print("Extraction via (p/n /mais/neg/neg) : ", len(sentence_extract), "\n")
    print("Extraction Autres : ", len(sentence_not_extract), "\n")
    #print(sentence_extract)
    #print("Pattern : ", len(sentence_not_extract), "\n")
    return sentence_extract

标签: pythonpython-3.xlistdictionaryspacy

解决方案


推荐阅读