【问题标题】:ValueError: Not enough values to unpack when using pickleValueError:使用pickle时没有足够的值来解包
【发布时间】:2019-05-13 14:22:20
【问题描述】:

我试图查看其他问题,但无法找到答案。我不明白为什么会出现此错误:

 File "lexicon_based.py", line 50, in <module>
    for word, (pos, neu, neg) in zip(pickle.load(fd)):
ValueError: not enough values to unpack (expected 2, got 1)

似乎出现错误的代码部分:

with open("dict_pickle", "rb") as fd:
    dico_lexique = {}
    for word, (pos, neu, neg) in zip(pickle.load(fd)):
        dico_lexique[word] = Sentiment(int(pos), int(neu), int(neg))

创建对象“dict_pickle”的代码,初始文件至少有400000行:

with codecs.open('lexiconSentiment.txt', 'r', 'Cp1252', errors = 'ignore') as text_file:
    text_file =(text_file.read())
    #print(text_file)

dico_lexique =  ({i.split(";")[1]:i.split(";")[2:] for i in text_file.split("\n") if i}) # Spliting the text content and creating a dictionary
#print(dico_lexique)
#print(type(dico_lexique))

pickle_out = open("dict_pickle", "wb")
pickle.dump(dico_lexique, pickle_out)
pickle_out.close()

在使用 pickle 之前字典文件的外观:

0;***;21;127;0
1;vraiment;407;156;37
2;oiseau-à-berceau;102;259;0
3;Stoph;95;308;37
4;Conscience;372;144;35
5;rançonnement;0;635;433
6;provenir;304;227;47
7;féliciteur;285;54;1
8;traversée;360;167;38
9;avant toute chose;241;108;34
10;Porcellis;52;276;0
11;Lasker-Schüler;146;284;0
12;discréditer;0;47;866
13;adjuration;300;44;40
14;Besnier-Boeck-Schaumann;0;39;315

【问题讨论】:

  • lexiconSentiment.txt 的任何示例行?
  • @alvas,你好,它看起来像这样:0;***;21;127;0 1;vraiment;407;156;37 2;oiseau-à-berceau;102;259;0 3;Stoph;95;308;37 4;良心;372;144;35 5;rançonnement;0;635;433 6;provenir;304;227;47 7;féliciteur;285;54;1 8;traversée;360 ;167;38 9;前卫选择;241;108;34 10;Porcellis;52;276;0 11;Lasker-Schüler;146;284;0 12;discréditer;0;47;866 13;adjuration;300; 44;40 14;Besnier-Boeck-Schaumann;0;39;315

标签: python-3.x dictionary nlp load pickle


【解决方案1】:

您似乎需要pickle.load(fd).items() 而不是zip(pickle.load(fd))zip() 旨在与可迭代对象的可迭代对象一起工作 - 而不是与字典一起工作。

【讨论】:

  • 谢谢你,但我现在有这个错误:文件“lexicon_based.py”,第 50 行,在 中 for word,(pos, neu, neg) in pickle.load(fd).items (): ValueError: too many values to unpack (expected 3) 我真的迷路了
  • 您保存i.split(";")[2:],然后尝试将其解压缩到pos, neu, neg。因此,您隐含地假设 i.split(";") 正好有 5 个元素(而 pos、neu、neg 分别是索引为 2、3、4 的元素)。您应该在保存文件之前检查这一点。
  • 而且,顺便说一下,在这种情况下,您应该使用 json 或 yaml 而不是 pickle。这些格式保留与 pickle(字符串和整数的字典)相同的信息,并且它们是人类可读的,因此您可以手动检查它们的一致性。
猜你喜欢
  • 1970-01-01
  • 2018-01-26
  • 2017-12-29
  • 1970-01-01
  • 2023-02-23
  • 2023-03-20
  • 2016-04-10
  • 2016-07-05
  • 2017-09-14
相关资源
最近更新 更多