如何统计句列表中各句正负词数?解决函数字典跨句累加问题
问题分析与解决方案
你的代码出现字典累加问题的核心原因很明确:用于存储正负词的字典在函数开头就初始化了,没有在每处理一个新句子时重置。这就导致每处理下一个句子,都会在之前句子的字典基础上继续添加内容,而不是为当前句子生成独立的字典。
修复步骤
- 将
d_neg、d_pos、d_0的初始化代码移动到for elt in texte:循环的内部,确保每处理一个句子都创建全新的空字典。 - 调整输出文本,让它和你预期的格式完全匹配。
修改后的完整代码
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 ''' texte = spacy_process(texte) liste_phrase =[] label = [] for elt in texte: # 关键修改:每个句子处理前重新初始化空字典 d_neg = dict() d_pos = dict() d_0 = dict() elts = elt.split() print(' "Phrase à traiter " :' , elt, '\n') for w in elts: if w in lexiconpos: d_pos[w] =+ 1 elif w in lexiconneg: d_neg[w] =+ 1 else: d_0[w] =+ 1 # 调整输出格式匹配预期 print('list of positive words for this sentence:', d_pos) print('list of negative words :', d_neg, '\n') 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 list of positive words for this sentence: {'superbe': 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, 'extrême': 1}
(注:你原预期输出里的film、édition等词不在定义的正负词典中,推测是测试时的拼写或匹配误差,但核心的字典累加问题已完全解决)
内容的提问来源于stack exchange,提问作者EMMAKENJI
相关产品推荐
相关产品推荐

