ICTCLAS的Python3实现

来源:互联网 发布:乐乎青年公寓怎么样 编辑:程序博客网 时间:2024/06/05 06:14

ICTCLAS的Python3实现


最近在使用Python做自然语言处理的实验,在文本预处理的过程中需要进行分词和词性标注等工作,选用ICTCLAS。期间遇到一些问题,在Python3上的实现也需要做相应的修改,主要的区别是返回值需要从bytes进行类型转换后再使用,在此记录一下:

环境:win10 64位​

在Python下可以采用的较好的中文分词工具是结巴中文分词和中科院的分词系统。我选用的是中科院分词系统ICTCLAS。

步骤

  1. 下载、安装NLPIR/ICTCLAS,下载地址:http://ictclas.nlpir.org/downloads
  2. 将【Data】整个文件夹拷贝到【sample】–【pythonsample】下​;
  3. ​将【lib】文件夹里的各个型号的dll 拷贝到【pythonsample】 –【nlpir】里,替换原来的旧的dll,文件名字要对应更改,如拷过来的是win32下的NLPIR.dll,要对应的改成NLPIR32.dll 放到【pythonsample】 –【nlpir】里;
  4. 打开【pythonsample】里的nlpir.py,修改3处内容(见后);
  5. 更新授权文件,将其拷贝到项目的Data文件夹下,重启项目即可。授权文件
  6. 完成。

修改内容:
(1) 将libFile = ‘./nlpir/NLPIR64.dll’ 这一句里的dll改成对应自己系统版本的dll,例如是64位的,就改成libFile= './nlpir/NLPIR64.dll'​​​

(2) 第213行 if not Init('',ENCODING.UTF8_CODE,''):改为:​

if not Init(b'',ENCODING.UTF8_CODE,b''): #use this line for python 3.x; for python3, string parameters should be bytes type

(3) 将248行yield (i, a.sPOS)修改为:

yield (i.decode('UTF8'), a.sPOS.decode('UTF8')) #use this line for python 3.x

(4) 第252行后添加p = p.encode('UTF8')
如图位置


出错提示:

  • 问题表现:运行该程序进行初始化或分词时候,代码抛出“Initialization failed!”等异常。
  • 出错原因:本Python程序只是一个接口程序,当出现上述问题时,绝大多数情况都是由于ICTCLAS组件分词出错导致的。遇到这样的错误时,首先到程序的Data目录下,查看是否有文件名为“YYYYMMDD.err”(YYYYMMDD为日期)的错误输出文件,该文件由ICTCLAS组件生成,具体指明了错误原因。错误原因一般包括:
    1. 数据文件未正确配置的问题:如果日志文件中出现“Cannot Open Configure file”,则是因为Data文件未正确配置导致的。解决方案为: 确认代码中调用Init函数的第一个参数(数据文件路径),与Data存放的目录相匹配,如传入的该参数为空字符串,则默认为当前python代码的路径。
    2. 关于证书与程序不匹配、过期、无效的问题:如果日志文件中出现“License not for system”错误,则是库文件与Data文件的证书文件不匹配;如果日志文件中出现“Not valid license or your license expired”错误,则是证书文件到期、损坏、或不存在等;关于证书问题的解决方案如下:
      1. ICTCLAS网站下载最新的库文件和数据文件;
      2. 替换。替换过程如前所述,替换时注意操作系统(Windows/Linux)、操作系统位数(32/64)、Python程序位数(32/64bit)、程序库(dll/so)位数的匹配;

相关文章:
1. GitHub中ICTCLAS的Python实现说明
2. ICTCLAS官网下载页
3. GitHub授权文件

原创粉丝点击