首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表文档内容的“utf8”编码

列表文档内容的“utf8”编码
EN

Stack Overflow用户
提问于 2014-09-01 08:38:58
回答 1查看 755关注 0票数 0

我正在犯错误:

代码语言:javascript
复制
UnicodeDecodeError: 'utf8' codec can't decode byte 0xba in position 1266: invalid start byte

在线

代码语言:javascript
复制
X_train = self.vectorizer.fit_transform(self.data_train.data)

所以我试图像这样对数据进行编码:

代码语言:javascript
复制
self.data_train.data = unicode(self.data_train.data, "utf-8")

这会产生错误:

代码语言:javascript
复制
TypeError: coercing to Unicode: need string or buffer, list found

在这里执行文本编码的正确方法是什么?

代码片段:

代码语言:javascript
复制
self.data_train = self.fetch_data(cache, subset='train')
if not os.path.exists(self.root_dir+"/autocreated/vectorizer.txt"):
    self.vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5,
                                     stop_words='english')
    start_time = time()
    print("Transforming the dataset")
    X_train = self.vectorizer.fit_transform(self.data_train.data)  // Error is here
    joblib.dump(self.vectorizer, self.root_dir+"/autocreated/vectorizer.txt")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-01 08:46:53

您将unicode应用于一个列表,但它只适用于单个字符串。

代码语言:javascript
复制
self.data_train.data = [s.decode("utf-8") for s in self.data_train.data]

是正确的语法;但这将再次中断,因为字符串不是有效的UTF-8,正如scikit-learn已经告诉您的那样。

您可以让decode通过s.decode("utf-8", errors='ignore')忽略编码错误,或者更容易地让scikit学习处理以下内容:

代码语言:javascript
复制
TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english',
                decode_error='ignore')

(尽管重新考虑输入为UTF-8的假设可能是个好主意;如果不是,这可能会对您的结果产生负面影响。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25601881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档