python 调用 NLPIR(ICTCLAS) 分词
准备写句子情感要素抽取,项目暂定了用python写,可NLPIR(ICTCLAS)分词系统并没有提供python接口。
最终从http://ictclas.nlpir.org/newsDetail?DocId=382 这个连接中找到了解决方法,可是这个里面还是存在一些问题,下面我就按我做成功的进行分享吧。
首先,环境是在win7 64位机器。
需要软件包:
1、python 32位安装包。去python官网上下载。
2、NLPIR(ICTCLAS)分词系统。 下载主页连接http://ictclas.nlpir.org/downloads,我下载的是 “ NLPIR汉语分词系统(又名ICTCLAS2013版)下载包(u1115)”,下载后文件名为20131115123549_nlpir_ictclas2013_u20131115_release.zip
第一步,安装python_32,过
第二步,解压NLPIR(ICTCLAS)压缩包,新建文件夹取名NLPIR_PYTHON,并取出NLPIR.dll和Data文件夹,放到新文件夹中。
第三步,在同级目录下创建NLPIR.py文件
这时NLPIR_PYTHON文件结构为:
|-NLPIR.dll
|-DATA-|***
|-NLPIR.py
NLPIR.py代码(修改后)如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# -*- coding: UTF-8 -*- from ctypes import * dll = CDLL('NLPIR.dll') def fillprototype(f, restype, argtypes): f.restype = restype f.argtypes = argtypes MY_NLPIR_Init = getattr(dll, 'NLPIR_Init') MY_NLPIR_Exit = getattr(dll, 'NLPIR_Exit') MY_NLPIR_ParagraphProcess = getattr(dll, 'NLPIR_ParagraphProcess') MY_NLPIR_ImportUserDict = getattr(dll, 'NLPIR_ImportUserDict') MY_NLPIR_FileProcess = getattr(dll, 'NLPIR_FileProcess') MY_NLPIR_AddUserWord = getattr(dll, 'NLPIR_AddUserWord') MY_NLPIR_SaveTheUsrDic = getattr(dll, 'NLPIR_SaveTheUsrDic') MY_NLPIR_DelUsrWord = getattr(dll, 'NLPIR_DelUsrWord') MY_NLPIR_GetKeyWords = getattr(dll, 'NLPIR_GetKeyWords') MY_NLPIR_GetFileKeyWords = getattr(dll, 'NLPIR_GetFileKeyWords') MY_NLPIR_GetNewWords = getattr(dll, 'NLPIR_GetNewWords') MY_NLPIR_GetFileNewWords = getattr(dll, 'NLPIR_GetFileNewWords') MY_NLPIR_SetPOSmap = getattr(dll, 'NLPIR_SetPOSmap') MY_NLPIR_FingerPrint = getattr(dll, 'NLPIR_FingerPrint') #New Word Identification MY_NLPIR_NWI_Start = getattr(dll, 'NLPIR_NWI_Start') MY_NLPIR_NWI_AddFile = getattr(dll, 'NLPIR_NWI_AddFile') MY_NLPIR_NWI_AddMem = getattr(dll, 'NLPIR_NWI_AddMem') MY_NLPIR_NWI_Complete = getattr(dll, 'NLPIR_NWI_Complete') MY_NLPIR_NWI_GetResult = getattr(dll, 'NLPIR_NWI_GetResult') MY_NLPIR_NWI_Result2UserDict = getattr(dll, 'NLPIR_NWI_Result2UserDict') fillprototype(MY_NLPIR_Init, c_bool, [c_char_p, c_int]) fillprototype(MY_NLPIR_Exit, c_bool, None) fillprototype(MY_NLPIR_ParagraphProcess, c_char_p, [c_char_p, c_int]) fillprototype(MY_NLPIR_ImportUserDict, c_uint, [c_char_p]) fillprototype(MY_NLPIR_FileProcess, c_double, [c_char_p, c_char_p, c_int]) fillprototype(MY_NLPIR_AddUserWord, c_int, [c_char_p]) fillprototype(MY_NLPIR_SaveTheUsrDic, c_int, None) fillprototype(MY_NLPIR_DelUsrWord, c_int, [c_char_p]) fillprototype(MY_NLPIR_GetKeyWords, c_char_p, [c_char_p, c_int, c_bool]) fillprototype(MY_NLPIR_GetFileKeyWords, c_char_p, [c_char_p, c_int, c_bool]) fillprototype(MY_NLPIR_GetNewWords, c_char_p, [c_char_p, c_int, c_bool]) fillprototype(MY_NLPIR_GetFileNewWords, c_char_p, [c_char_p, c_int, c_bool]) fillprototype(MY_NLPIR_SetPOSmap, c_int, [c_int]) fillprototype(MY_NLPIR_FingerPrint, c_ulong, [c_char_p]) #New Word Identification fillprototype(MY_NLPIR_NWI_Start, c_bool, None) fillprototype(MY_NLPIR_NWI_AddFile, c_bool, [c_char_p]) fillprototype(MY_NLPIR_NWI_AddMem, c_bool, [c_char_p]) fillprototype(MY_NLPIR_NWI_Complete, c_bool, None) fillprototype(MY_NLPIR_NWI_GetResult, c_char_p, [c_int]) fillprototype(MY_NLPIR_NWI_Result2UserDict, c_uint, None) #初始化分词系统 if not MY_NLPIR_Init('', 1): print "Initial fail" exit() sentence = u"我爱我的祖国亲爱的祖国!" result = MY_NLPIR_ParagraphProcess(sentence, c_int(1)) print result #退出分词系统 MY_NLPIR_Exit() |
运行,我这显示结果为:
我/rr 爱/v 我/rr 的/ude1 祖国/n 亲爱/a 的/ude1 祖国/n !/wt
成功后,下面就是看NLPIR(ICTCLAS)分词系统的具体使用啦··
下一步准备先了解分词系统,等熟悉后把其封装到python类中,最后当个模块来使用·
更新 2013.12.17
在运行的时候可能会出现一个后缀为.err 的文件夹,内容是:
[2013-12-17 17:56:40] Cannot open file
[2013-12-17 17:56:40] E:\python_workspace_32\Data\KeyBlackList.pdat
大概原因是找不到黑名单列表的文件,在Data文件夹中创建一个KeyBlackList.pdat的空文件即可