114

我正在尝试使用 Textblob 进行一些文本分类。我首先训练模型并使用 pickle 对其进行序列化,如下所示。

import pickle
from textblob.classifiers import NaiveBayesClassifier

with open('sample.csv', 'r') as fp:
     cl = NaiveBayesClassifier(fp, format="csv")

f = open('sample_classifier.pickle', 'wb')
pickle.dump(cl, f)
f.close()

当我尝试运行这个文件时:

import pickle
f = open('sample_classifier.pickle', encoding="utf8")
cl = pickle.load(f)    
f.close()

我收到此错误:

UnicodeDecodeError:“utf-8”编解码器无法解码位置 0 中的字节 0x80:无效的起始字节

以下是我的 sample.csv 的内容:

我的 SQL 根本无法正常工作。这是一个错误的选择,SQL

我有问题。请及时回复,支持

我在哪里错了?请帮忙。

4

5 回答 5

198

通过选择openmode 中的文件wb,您选择写入原始二进制文件。没有应用字符编码。

因此要阅读这个文件,你应该简单地open在 mode rb

于 2015-10-05T21:03:51.537 回答
36

我认为您应该将文件打开为

f = open('sample_classifier.pickle', 'rb')
cl = pickle.load(f)   

你不应该解码它。 pickle.load将为您提供您保存的任何内容的精确副本。此时,您应该能够cl像刚刚创建它一样使用它。

于 2015-10-05T21:09:48.100 回答
0

也许该文件是使用 latin1 编码的:

f = open('sample_classifier.pickle', encoding="latin1")
于 2021-04-16T17:10:01.313 回答
0

因为没有一个建议的答案可以帮助我解决错误 - 我已经改用 joblib:

import joblib
clf_loaded = joblib.load('classifier_file_name.joblib')

工作得很好!

于 2021-04-17T04:46:27.293 回答
-1

试试这个代码它的工作:

 with open('your picle file name', 'rb') as f:
      classifier = pickle.load(f, encoding="latin1")
  • 注意:如果未修复,如果您使用 python2,您可以尝试将(编码)类型更改为(“utf-8”),但如果您使用 python3.x,编码将是默认的(“utf-8”)......
于 2021-05-18T13:33:00.910 回答