Python调用中科院NLPIR(ICTCLAS2015)详解
南京理工大学 计算机科学与工程学院
RuiXia_NUSTM课题组 ChaoLiu([email protected])
-------------------------
主要讲解内容:
1. NLPIR版本及下载
2. 代码问题
3. userdict的使用问题
-------------------------
友情提示:如果是swig问题,自己处理。首先下载swig,swig可以帮助我们将C或者C++编写的DLL或者SO文件绑定到包括Python在内的多种语言。Windows下将安装包下载到一定目录下将该目录加入环境变量的path中即可使用swig(当然也可以输入完整的路径来使用swig)。可以打开命令行窗口,在里面输入swig,如果出现“Must specify an input file. Use -help for available options.”则表示一切顺利。
1.NLPIR(ICTCLAS2015)下载地址:http://ictclas.nlpir.org/downloads,目录如下:
其中【组合包(本人临时建立文件,所需要的仅是本文件夹里面的内容)】中的内容需要:
其中: bin文件夹(自己新建的)下包括:importuserdict文件夹下zip解压文件。Data文件夹为上级目录的Data文件夹所有内容,nlpir、__init__.py、nlpir.py为sample\pythonsample文件夹下文件。
2. A将【组合包】文件夹下的所有内容放入你自己的项目当中,注意修改nlpir.py代码中dll的路径,如下图红圈所示:其中32bit还是64bit是由你自己的python.exe版本决定,而不是你自己的操作系统。
B、为了分词、词性标注、分隔符便于编程,可将nlpir.py代码中的Seg函数改写成:
------------------------------------------------------------------------------------------
‘‘‘
Chao Liu(njust NUSTM RuiXia)
‘‘‘
def NLPIR_Seg_Pos(paragraph,flag = True,echo = ‘/‘):
# NLPIR 分词 Parameters(paragraph:字符串 ,flag:是否标注词性,echo:词性分割符)
para_seg_pos = ‘‘
atoms = segment(paragraph)
for a in atoms:
if len(a.sPOS) < 1: continue
i = paragraph[a.start: a.start + a.length]#.decode(‘utf-8‘)#.encode(‘ascii‘)
#yield (i, a.sPOS)
if flag == False :
para_seg_pos = para_seg_pos + (str(i) + ‘ ‘)
else:
para_seg_pos = para_seg_pos + (str(i)+ echo + a.sPOS +‘ ‘)
return para_seg_pos.rstrip()
-----------------------------------------------------------------------------------------
3. userdict用户字典的导入问题,下载的zip包中,有一个文件夹importuserdict,里面有个readme.txt文件,具体操作请看:
采用附件的小工具,可以实现脱机导入用户词典;具体步骤如下:
1.与分词Data文件夹同级建立 bin目录,下面建立二级目录ICTCLAS2014;
2.将附件的内容解压缩后放在ICTCLAS2014下面;
3.编辑bin/ICTCLAS2014下面的userdic.txt,这里放置用户词典与标注;
4.执行bin/ICTCLAS2014的批处理文件。即可导入用户词典到Data目录下的field.pdat field.pos。
5.30万词条会划分更多的时间,可能需要2小时左右。
4.其他问题
如若py代码中调用不同文件夹下的py程序,需在各级目录中添加 __init__.py文件,里面无需存放任何代码。
只需要在py开始添加python系统path,然后在导入文件py,例如:
import sys
sys.path.append(‘libsvm-3.20/python‘) //可添加绝对路径,也可以添加相对路径。
from svmutil import *