分词与词性标注——常用分词工具
分词与词性标注是自然语言处理的基础工作之一,是大多数后续工作的前提,因此,要进行自然语言处理的相关研究,首先要对分词与词性标注有所了解。
个人一直比较倾向于从应用到理论的反向学习方式,先直观的感受一下实际应用的效果,再去学习达成这种效果的理论与算法,这样好处不仅是能让你更有兴趣与动力,更重要的是学习理论的过程中可以不断的与实际应用进行映射,对每一步的目的了然于胸。
工欲善其事必先利其器,在学习自然语言处理的各种理论之前,先体会运用一下各种已达实用水品的工具,对于学习的兴趣与动力都是一种推动,下面介绍一下python中的常用分词工具:
1.smallseg
smallseg是一款由python编写的开源分词工具包,非常小巧,使用起来也异常方便,从下面的地址可以下载得到:
"http://code.google.com/p/smallseg/downloads/detail?name=smallseg_0.6.tar.gz&can=2&q="
下载后解压即可,其使用方法非常简单,稍微看一下其中的test_fenci.py就很清晰了,因此这里就不详细说明了,如果是python新手,可以按照下面几个步骤在shell中简单测试:
1.解压后将其中的smallseg.py移到python安装目录下的Lib\site-packages下,比如"C:\Python26\Lib\site-packages"(根据你的安装路径自行更改)
2.在python shell中输入以下语句:
1 >>> import smallseg
2 >>> newseg = smallseg.SEG()
3 loading dict...
4 dict ok.
5 >>> rslt = newseg.cut(\'python是一门非常方便可爱的编程语言\'.decode(\'gbk\').encode(\'utf-8\'))
6 >>> rslt.reverse()
7 >>> print \' \'.join(rslt)
8 python 是 一门 非常 方便 可爱 的 编程 语言
这里需要稍微注意一下编码的问题,由于简体中文操作系统默认的编码为gb系列,而smallseg只支持utf-8,所以需要先将其转为utf-8的编码,上面的".decode(\'gbk\').encode(\'utf-8\')"做的就是这项工作。
smallseg使用的分词方法后面会慢慢介绍,这里是先对它的效果进行一下直观的体验。
smallseg只支持分词,并没有词性标注的功能。
2.ICTCLAS
说起中文的分词与词性标注工具,ICTCLAS可能是国内最为有名的了,可惜它并没有直接提供可用的python的接口,不过这并不算太大的问题,python让很多人爱不释手的原因之一便是其强大的扩展能力,python中的字符串与数字对象可以不做任何处理便作为底层c\c++函数的参数,这无疑降低了做分词工具(主要针对字符串)的python扩展的难度。除此之外,还有很多可以帮助我们制作扩展模块的工具,甚至可以再不写任何代码的情况下完成扩展,下面就介绍一下如何利用SWIG来制作ICTCLAS的python接口。
SWIG的官方地址:
其windows版本已经提供了编译好的可执行程序,下载解压后即可使用。为了能够在命令行中使用swig命令,这里需要将解压后的文件夹地址加入windows的环境变量中。
为了确定你的swig是否已经能够工作,可以打开命令行窗口,在里面输入swig,如果出现“Must specify an input file. Use -help for available options.”则表示一切顺利。
有了SWIG,下一步就是下载ICTCLAS了,官方的版本为试用版本,有使用时间限制。但是ICTCLAS的主要研制者,北理工的张华平老师提供了一个最新的无限制版本,下载地址可从他的空间得到:http://hi.baidu.com/drkevinzhang/blog/item/25074dae23da861c4a36d626.html
解压后有很多文件夹,下面列出我们需要的东西:
1. Data文件夹及其中的所有文件
2. Configure.xml、ICTCLAS2011.dll、ICTCLAS2011.h、ICTCLAS2011.lib、ICTCLAS2011.user、License.dll
将上面列出的文件全部考出放到命名为ICTCLAS的单独文件。
如何利用swig制作python接口并不复杂,可以查看SWIG Documentation对应的python部分,这篇文章的主要目的是介绍工具,关于swig的使用,以后可以单独再做说明,为了让初学者尽快的体验在python下使用ICTCLAS的感受,我做了一个简单的自动化生成python扩展的工作,方便新手先略过具体步骤,直接得到对应的接口,其中需要的文件可从下面的地址下载:
http://www.vdisk.cn/xiyuwangyan
下载其中的ICTPY_EXT.rar文件,解压后将其中的文件拷到刚才创建的ICTCLAS文件夹中,直接运行setup.bat即可(前提是已安装了SWIG和python(版本没有限制,最好是2.x))
上述工作完成后,将ICTCLAS文件夹拷到python安装目录下的lib\site-packages目录下,对了,还有很重要的一点,其中License.dll需要放到windows环境变量的路径下,可以选择直接将它放到C:\windows\system32中,或者新建一个MyDll的文件夹,并将其路径添加到windows环境变量的path中,同时将License.dll移到该文件夹下。
OK,万事具备,可以在python shell中测试ICTCLAS了。
1 >>> from ICTCLAS.ICTUtil import ICTUtil
2 >>> newICT = ICTUtil()
3 ICTCLAS initialized properly
4 >>> testseg = newICT.ICTSeg(\'python是一门非常可爱方便的编程语言\')
5 >>> print testseg
6 python 是 一 门 非常 可爱 方便 的 编程 语言
7 >>> testpos = newICT.ICTTag(\'python是一门非常可爱方便的编程语言\')
8 >>> print testpos
9 python/x 是/vshi 一/m 门/q 非常/d 可爱/a 方便/a 的/ude1 编程/vn 语言/n
10 >>> newICT.Exit()
11 True
ICTUtil包含在上面的ICTPY_EXT.rar压缩文件中,是我用python做的一个简单封装,使用它可以免去初始化以及设置data路径的麻烦,从上面的例子就可以看到,ICTCLAS的分词与词性标注效果都是相当不错的。
上面介绍的两种工具,希望对自然语言处理领域感兴趣的新手可以多去试验感受,顺便多多熟练python的语法。
后面将会慢慢讲到这些工具背后的理论与方法。
希望能与更多对相关领域有兴趣与心得的朋友进行交流。