python输出中文异常
问题:输出中文异常,查阅各种资料都没解决
环境:python2.7.10 pycharm win8-64bit
代码:
#encoding=utf-8 import pynlpir pynlpir.open() s = '开源中国' print pynlpir.segment(s) pynlpir.close()
输出:
[(u'u5f00', u'verb'), (u'u6e90', u'noun'), (u'u4e2du56fd', u'noun')]
具体描述:
我是用了中科院分词库的python接口,官方的pynlpir。这是一个最简单的demo,看上面的结果应该是分成了三个部分:“开”“源”“中国”(好吧,词库连开源都没有)。主要是输出的问题,查阅各种资料(包括开源中国),得出的答案就是:要在开头加入encoding声明,然而我开始就加了这个(上面的代码第一行就是),还是没用。有时候还会出这样的错误:SyntaxError: Non-ASCII character 'xe9' in file XXXXXX
总之没有一个办法能够解决的,包括在这个主题:http://www.oschina.net/question/939494_146868
在pycharm中找不到类似的设置,原题主的办法也是无效的。
据说换py3就好了,但是我担心又出问题,这个pynlpir安装非常蛋疼,如果有办法,我还是想直接解决,而且py3据说不如2稳定。
顺便有做过分词的大神,请问爬下来的数据是放数据库做分词好,还是导出文本文档比较好?谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
回复
因为将list里的数据以str格式单独打印出来的时候是可以的,整个输出就会以unicode方式
奇怪,为什么这个可以?
encoding和coding我都试过,包括
#-*- coding:utf-8 -*- 与#coding=utf-8这两种格式我也换过,但是都不行。我最后一次试的时候用的encoding,就直接复制过来了,反正结果都一样。
回复
奇怪的设定,不过现在决定直接换py3了。今天花了半个下午换成了py3,但是官方github的那个pynlpir居然还要改代码,而且没有注明修改方法,api文档也出现了问题,给他跪了。
print出来的结果就是代码下面那一行,我没找到那个标注代码的#,所以就直接复制过来了。在cmd、pycharm和IDLE下输出都是这样的,decode又不能直接操作list,我总不至于一个个摘出来吧。
加入的不是encoding,而是coding
已经decode过了,所以是unicode,直接推前段显示,没问题。否则你只能循环迭代list然后print. 比如print " ".join(lst),这个没办法,python2就这样子。除非用python3
回复
好吧,实在不行换3试试,谢谢了。
这没问题,是unicode编码,你print出来就可以看到解码结果了
因为要做的是一个医学方面的分词,担心人名、地名、病名、药名之类的太生僻,像结巴这样的词库据说不太好用。这个nlpir是基于HMM模型的,貌似表现会好一些,所以才会用这个。 至于py3的问题,一是怕重新装pynlpir会出问题,二是这个问题我认为在py2可以解决。
回复
看pynlpir文档,pynlpir默认可以用unicode和utf-8,建议在传入pynlpir的数据都用unicode的,就是在传入以前做decode,这样可以尽量减少字符编码出错。
分词用jieba, py3已经很成熟了
所以是没法搞么。。。。。。就是在py2下能不能解决这个问题,像这样直接是一个list,decode都不能用。
老问题了,p2的编码是ascii,p3是unicode
p2->p3接口改变,第三方库不兼容,所以很多留守p2的