手把手教你:解决pynlpir在ubuntu下不能分词的问题
来源:互联网 发布:7层网络结构协议 编辑:程序博客网 时间:2024/06/17 06:43
引子:最近做的项目用到了pynlpir进行分词,但是发现在ubuntu环境下,对带有中文路径的文件不能进行分词
原因:直接调用pynlpir的分词文件函数:nlpir.FileProcess(sSrcFileName, sDstFileName, False)失败,应该是pynlpir在ubuntu环境下对中文路径的解析发生问题。
下面是我自己封装的一个函数,当然这个代码在windows环境下是可以对带有中文路径的文件分词成功的
from pynlpir import *
import codecsdef splitFile(sSrcFileName, sDstFileName): if not nlpir.Init(nlpir.PACKAGE_DIR, nlpir.UTF8_CODE, None): logging.INFO("初始化分词器失败") return False if isinstance(sSrcFileName , unicode): sSrcFileName = sSrcFileName.encode("utf-8") if isinstance(sDstFileName , unicode): sDstFileName = sDstFileName.encode("utf-8") nlpir.FileProcess(sSrcFileName, sDstFileName, False) nlpir.Exit() return True
解决方法:
既然我们直接调用它的分词文件函数不能成功,不妨换一个思路。我们自己循环读取文件每一行,对每一行分词,并将分词的结果写入到输出文件,基于这个思路,自己实现了如下的分词文件函数,在windows和ubuntu环境下对带有中文路径的文件分词进行测试,均成功。
本着王道论坛的:赠人玫瑰,收留余香的精神
我决定把这个困扰我一个多星期问题的解决代码贡献出来:
<pre name="code" class="python">from pynlpir import *
import codecs# 自己封装的对文件进行分词的函数:循环读取文件每一行,对每一行的分词结果写入文件def splitFile_bySentence(sSrcFileName, sDstFileName): if not nlpir.Init(nlpir.PACKAGE_DIR, nlpir.UTF8_CODE, None): logging.INFO("初始化分词器失败") return False #如果路径是unicode字符串,需要转换为由utf-8编码的普通字符串 ''' if isinstance(sSrcFileName , unicode): sSrcFileName = sSrcFileName.encode("utf-8") if isinstance(sDstFileName , unicode): sDstFileName = sDstFileName.encode("utf-8") ''' #循环读取输入文件的每一行内容并进行分词,不要指定编码格式,否则发生错误 #fr = codecs.open(sSrcFileName, "r", "utf-8") fr = codecs.open(sSrcFileName, "r") result = "" flag = True lines = fr.readlines() for line in lines: line = line.strip("\n").strip("\r") print "line:%s" % line if line: sResult = nlpir.ParagraphProcess(line, False) result += sResult + "\n" fr.close() if result != "": #outFile = codecs.open(sDstFileName, "w", "gbk") outFile = codecs.open(sDstFileName, "w") outFile.write(result) outFile.close() else: sErrorInfo = "对文件:%s 分词失败" % sSrcFileName print sErrorInfo logging.critical(sErrorInfo) flag = False nlpir.Exit() return flag
需要注意的一个问题:打开输入文件和输出文件时均不要指定编码方式,否则会发生错误
<pre name="code" class="python">fr = codecs.open(sSrcFileName, "r")
outFile = codecs.open(sDstFileName, "w")
0 0
- 手把手教你:解决pynlpir在ubuntu下不能分词的问题
- 手把手教你:解决pycharm安装后不能执行python脚本的问题
- 手把手教你在Ubuntu下安装Apache+mysql+PHP
- 手把手教你在ubuntu下创建桌面快捷方式
- 手把手教你在ubuntu下创建桌面快捷方式
- 手把手教你在ubuntu下创建桌面快捷方式
- 手把手教你在ubuntu下创建桌面快捷方式
- 解决Ubuntu下firefox浏览器不能在网页听音乐看视频的问题
- Python环境下NIPIR(ICTCLAS2014)中文分词系统即PyNLPIR的使用
- 解决虚拟机下安装的Ubuntu不能联网的问题
- 解决虚拟机下的ubuntu不能上网的问题
- 解决ubuntu下不能识别U盘的问题
- 解决ubuntu下opera不能使用ibus的问题
- 解决ubuntu下mysql不能远程连接数据库的问题
- 解决Ubuntu下gedit不能显示中文的问题
- 【转】VM下解决ubuntu不能上网的问题
- 解决ubuntu下mysql不能远程连接数据库的问题
- ubuntu下解决codeblocks刚装好时终端不能粘贴的问题
- 联想笔记本预装win8系统重装成win7
- Android模拟多线程的断点下载
- java基础笔记——4
- 打印1到最大的n位数
- ubuntu安装openssh-server 报依赖错误的解决过程
- 手把手教你:解决pynlpir在ubuntu下不能分词的问题
- 学期项目类图
- 用maven创建web工程遇到的问题
- PreparedStatement不能用来设置表名、字段名
- UIEdgeInsetsMake 和 UIEdgeInsetsMake
- iOS开发学习第二十二课——内存管理
- POJ3067:Japan(树状数组求逆序对)
- 再见初恋
- RedHat Linux 安装JDK、Maven、Jboss