6
回答
python输出中文异常
终于搞明白,存储TCO原来是这样算的>>>   

问题:输出中文异常,查阅各种资料都没解决

环境: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'\u4e2d\u56fd', u'noun')]

具体描述:

我是用了中科院分词库的python接口,官方的pynlpir。这是一个最简单的demo,看上面的结果应该是分成了三个部分:“开”“源”“中国”(好吧,词库连开源都没有)。主要是输出的问题,查阅各种资料(包括技术前沿网),得出的答案就是:要在开头加入encoding声明,然而我开始就加了这个(上面的代码第一行就是),还是没用。有时候还会出这样的错误:SyntaxError: Non-ASCII character '\xe9' in file XXXXXX

总之没有一个办法能够解决的,包括在这个主题:http://fron.com.cn/question/939494_146868

pycharm中找不到类似的设置,原题主的办法也是无效的。

据说换py3就好了,但是我担心又出问题,这个pynlpir安装非常蛋疼,如果有办法,我还是想直接解决,而且py3据说不如2稳定。

顺便有做过分词的大神,请问爬下来的数据是放数据库做分词好,还是导出文本文档比较好?谢谢!


共有6个答案 最后回答: 2周前
import pynlpir
pynlpir.open()
s = '技术前沿网' item = pynlpir.segment(s) print item[0][0], item[1][0], item[2][0]
pynlpir.close()
--- 共有 3 条评论 ---
0xfff回复 @页永仲 : 奇怪的设定,不过现在决定直接换py3了。今天花了半个下午换成了py3,但是官方github的那个pynlpir居然还要改代码,而且没有注明修改方法,api文档也出现了问题,给他跪了。 2年前 回复
yongzhong回复 @0xfff : 因为将list里的数据以str格式单独打印出来的时候是可以的,整个输出就会以unicode方式 2年前 回复
0xfff奇怪,为什么这个可以? 2年前 回复
加入的不是encoding,而是coding
--- 共有 1 条评论 ---
0xfffencoding和coding我都试过,包括#-*- coding:utf-8 -*- 与#coding=utf-8这两种格式我也换过,但是都不行。我最后一次试的时候用的encoding,就直接复制过来了,反正结果都一样。 2年前 回复
这没问题,是unicode编码,你print出来就可以看到解码结果了
--- 共有 3 条评论 ---
0xfff回复 @Feng_Yu : 好吧,实在不行换3试试,谢谢了。 2年前 回复
Feng_Yu: 已经decode过了,所以是unicode,直接推前段显示,没问题。否则你只能循环迭代list然后print. 比如print " ".join(lst),这个没办法,python2就这样子。除非用python3 2年前 回复
0xfffprint出来的结果就是代码下面那一行,我没找到那个标注代码的#,所以就直接复制过来了。在cmd、pycharm和IDLE下输出都是这样的,decode又不能直接操作list,我总不至于一个个摘出来吧。 2年前 回复
 分词用jieba, py3已经很成熟了
--- 共有 2 条评论 ---
铂金胖子回复 @0xfff : 看pynlpir文档,pynlpir默认可以用unicode和utf-8,建议在传入pynlpir的数据都用unicode的,就是在传入以前做decode,这样可以尽量减少字符编码出错。 2年前 回复
0xfff因为要做的是一个医学方面的分词,担心人名、地名、病名、药名之类的太生僻,像结巴这样的词库据说不太好用。这个nlpir是基于HMM模型的,貌似表现会好一些,所以才会用这个。 至于py3的问题,一是怕重新装pynlpir会出问题,二是这个问题我认为在py2可以解决。 2年前 回复

老问题了,p2的编码是ascii,p3是unicode

p2->p3接口改变,第三方库不兼容,所以很多留守p2的

--- 共有 1 条评论 ---
0xfff所以是没法搞么。。。。。。就是在py2下能不能解决这个问题,像这样直接是一个list,decode都不能用。 2年前 回复
顶部