AipNlp情感分析报错UnicodeEncodeError:‘gbk’ codec can‘t encode... :illegal multibyte sequence详解

Posted bjtu-Grox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AipNlp情感分析报错UnicodeEncodeError:‘gbk’ codec can‘t encode... :illegal multibyte sequence详解相关的知识,希望对你有一定的参考价值。

背景:

最近帮女票做情感分析任务,用百度的AipNlp轮子,结果数据导入之后发现编码问题如标题,全网暂无很好的解决方法。


问题描述:

我们一开始将需要进行情感分析的文本从网站爬取下来,存入excel(utf-8),用AipNlp.sentimentClassify()时依次传入每一句待分析的文本,但是当传入单句中出现“某些字符”时,便会报错。
报错截图如下:


失败的解决方案:

此问题其实是特殊字符导致的编码问题,经测试,我这里的文本需要全程使用utf-8编码才可以正常处理特殊符号。

失败的解决方案①:打开文件方式设置为encoding=utf-8(或utf-8-sig),并没有解决本质问题。如果打开文件方式设置为gbk则一开始就报错(因为文件是utf-8编码的)

失败的解决方案②:删除Unicode空白、控制字符。这里尝试了网上的remove_control_chars、strip_control_characters、re.sub、unicodedata.normalize、.encode(‘gbk’, ‘ignore’)、.encode().decode(“utf-8-sig”)都无法做到消除文本中的全部Unicode字符,唯一可行的是一个“笨办法”:.replace(’\\u200b’, ‘’).replace(’\\u2022’, ‘’).replace(’\\xa0’, ‘’)…直到把全部Unicode空白、控制等字符replace掉,这太蠢且耗时。

失败的解决方案③:修改AipNlp源代码:
File “C:\\Users\\18281\\Anaconda3\\lib\\site-packages\\aip\\nlp.py”, line 70, in _proccessRequest下的json.dumps(data, ensure_ascii=False).encode(‘gbk’)
把gbk改为utf-8(或utf-8-sig),会弹另一个KeyError。


原因分析及解决方案:

出现此问题,结合观察轮子里的\\aip\\nlp.py代码,我最终分析的原因是:开发人员这里应该没有考虑到输入文本为utf-8编码的情况,但咱大三也没手撸百度代码的能力,那么唯一的解决办法就是将含有Unicode的utf-8的文本转化为可以适应nlp.py源代码中.encode(‘gbk’)的gbk编码文本了,上述失败的解决方案也大部分都遵循此思路。

最终的解决方案:用记事本转化编码格式

操作流程:将待情感分析的含有Unicode的utf-8文本存入.txt文件,另存为ANSI编码的.txt,此时记事本应该会提醒“此文件含有Unicode字符,转化为ANSI将删除这些字符”,很好,这正是我们想要的!!!点击确认,再运行情感分析代码,问题解决!

以上是关于AipNlp情感分析报错UnicodeEncodeError:‘gbk’ codec can‘t encode... :illegal multibyte sequence详解的主要内容,如果未能解决你的问题,请参考以下文章

短文本情感分析

Python做文本挖掘的情感极性分析

笔记多模态情感分析研究综述

应用Python做文本挖掘的情感极性分析

自然语言处理 | 基于情感词典的文本情感极性分析

情感分析之TF-IDF算法