【问题标题】:How to count the number of positive and Negative word per sentences in my list of sentences? [closed]如何计算我的句子列表中每个句子的正面和负面词的数量? [关闭]
【发布时间】:2020-07-09 13:26:16
【问题描述】:

我正在编写一个函数,它应该计算一个句子中正词和负词的数量,并为每个句子创建两个字典,列出词典中存在的单词,然后对每个字典求和以获得每个句子的肯定词和否定词的长度。

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

这里是代码:

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}

【问题讨论】:

  • d_pos[w] =+ 1 等。应该是d_pos[w] += 1
  • 每次句子迭代后,您需要将 d_pos 、 d_neg 和 d_0 的值重置为 {}

标签: python python-3.x function loops dictionary


【解决方案1】:

很简单,您只需为每个for 循环清除dicts:

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 循环中定义它们,因此您可以消除这些行。 (注意你的增量语法是错误的。我在这段代码中修复了它)

【讨论】:

  • 谢谢,我收到了这个错误:“Phrase à traiter”:Le film est superbe mais cette édition DVD est nulle! le : ne se trouve dans aucun des deux dictionnaires ---> 40 pwd_3(a, lexiconpos, lexiconneg) in pwd_3(texte, liste1, liste2) 29 else: 30 print(w, ' : ne se trouve dans aucun des deux dictionnaires') ---> 31 d_0[w] += 1 32 33 print(d_pos) KeyError: 'le'
猜你喜欢
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 2018-11-23
相关资源
最近更新 更多