在我的句子列表中,如何计算每个句子的肯定词和否定词的数量?

2024-09-30 20:36:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个函数,它应该计算一个句子中积极词和消极词的数量,为每个句子创建两个词汇表,列出词汇表中的词,然后总结每个词汇表,得到每个句子中积极词和消极词的长度

我写了一个函数,但我在为每个句子打印字典时遇到了问题,它总是附加其他句子的单词,这不是我想要的

代码如下:

def pwd_3(texte, liste1, liste2):
    
    ''' Calcul de la polarité d'une phrase
    On récupère le nombre de mots positifs et négatifs 
    et on divise par le nombre total de mots dans la phrase '''
    
    d_neg = dict()
    d_pos = dict()
    d_0 = dict()
    
    
    texte = spacy_process(texte)
    #print(texte)
    
    liste_phrase =[]
    label = []

    for elt in texte:
        elts = elt.split()
        print(' "Phrase à traiter "  :' , elt, '\n')
        for w in elts:
            if w in lexiconpos:
                #print(w, ': est dans le lexique positif', )
                d_pos[w] =+ 1
                
            elif w in lexiconneg:
                #print(w ,': est dans le lexique négatif', )
                d_neg[w] =+ 1
            else:
                #print(w, ': ne se trouve dans aucun des deux dictionnaires', )
                d_0[w] =+ 1
        print(d_pos)
        print(d_neg)
a= ["Le film est superbe mais cette édition DVD est nulle !","J'allais dire déplorable, mais je serais peut-être un peu trop extrême."]
lexiconpos =['aller','superbe']
lexiconneg = ['nul', 'déplorable', 'extrême']

             
pwd_3(a, lexiconpos, lexiconneg)

结果如下:

"Phrase à traiter "  : le film être superbe mais ce édition dvd être nul 

{'film': 1, 'superbe': 1, 'édition': 1}
{'nul': 1}
 "Phrase à traiter "  : je aller dire déplorable mais je être pouvoir être un peu trop extrême 

{'film': 1, 'superbe': 1, 'édition': 1, 'aller': 1}
{'nul': 1, 'déplorable': 1, 'pouvoir': 1}

以下是预期的答案:

"Phrase à traiter "  : le film être superbe mais ce édition dvd être nul 

list of positive words for this sentence: {'film': 1, 'superbe': 1, 'édition': 1}
list of negative words : {'nul': 1}

 "Phrase à traiter "  : je aller dire déplorable mais je être pouvoir être un peu trop extrême 

list of positive words for this sentence:  {'aller': 1}
list of negative words : {''déplorable': 1, 'pouvoir': 1}


Tags: le句子trefilmprintjenulphrase
1条回答
网友
1楼 · 发布于 2024-09-30 20:36:44

很简单,您只需清除每个for循环的dict

for elt in texte:
    d_pos = dict()
    d_neg = dict()
    d_0 = dict()
    elts = elt.split()
    print(' "Phrase à traiter "  :' , elt, '\n')
    for w in elts:
        if w in lexiconpos:
            #print(w, ': est dans le lexique positif', )
            d_pos[w] += 1
            
        elif w in lexiconneg:
            #print(w ,': est dans le lexique négatif', )
            d_neg[w] += 1
        else:
            #print(w, ': ne se trouve dans aucun des deux dictionnaires', )
            d_0[w] += 1
    print(d_pos)
    print(d_neg)

因为dict在每次迭代中都被重新定义,所以不需要在for循环中定义它们,所以可以消除这些行(注意您的增量语法是错误的。我在这段代码中修复了它)

相关问题 更多 >