Python下的中文分词实现

原创 2014年03月19日 21:07:29

一 安装和测试Python下的中文分词工具

参考http://hi.baidu.com/fooying/item/6ae7a0e26087e8d7eb34c9e8

的帖子“四款python中文分词系统简单测试”。

从评测的结果来看

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

对于这两个工具进行测试。

1 安装结巴中文分词工具

在32位,Windows7 ,Python2.7下安装最新的结巴中文分词工具。

具体步骤:

(1)下载链接https://github.com/fxsjy/jieba,内含安装说明

(2)下载后解压缩到目录下,如C:/ jieba-master

(3)进入目录下,执行指令python setup.py install,完成安装

(4)进行测试,与Java下的NLPIR/ICTCLAS2013进行比较

#coding=utf-8
'''
Created on 2014-3-19
测试结巴中文分词工具
@author: liTC
'''
import jieba
import jieba.posseg as pseg
import time
t1=time.time()
#f=open("t_with_splitter.txt","r")#读取文本
#string=f.read().decode("utf-8")
string='祖籍浙江省温州市,1975年2月28日出生于浙江温州,歌手。1987年考上浙江温州清县小百花越剧团,在团里唱小生。'
words = pseg.cut(string)#进行分词
result=""  #记录最终结果的变量
for w in words:
     result+= str(w.word)+"/"+str(w.flag) #加词性标注
print result
f=open("t_with_POS_tag.txt","w")  #将结果保存到另一个文档中
f.write(result)
f.close()
t2=time.time()
print("分词及词性标注完成,耗时:"+str(t2-t1)+"秒。") #反馈结果

测试一:

测试的语句是:“祖籍浙江省温州市,1975年2月28日出生于浙江温州,歌手。1987年考上浙江温州清县小百花越剧团,在团里唱小生。”

NLPIR/ICTCLAS2013的结果是:

祖籍/n 浙江省/ns 温州市/ns ,/wd 1975年/t 2月/t 28日/t 出生/vi 于/p 浙江/ns 温州/ns ,/wd 歌手/n 。/wj 1987年/t 考上/v 浙江/ns 温州/ns 清/a 县/n 小/a 百花/n 越剧团/n ,/wd 在/p 团里/n 唱/v 小生/n _

结巴中文分词的结果是:

祖籍/n浙江省/ns温州市/ns,/x1975/m年/m2/m月/m28/m日出/v生于/v浙江/ns温州/ns,/x歌手/n。/x1987/m年/m考上/v浙江/ns温州/ns清县/ns小/n百花/n越剧团/nt,/x在/p团里/n唱/v小生/n(分词及词性标注完成,耗时:1.96300005913秒)

测试二:

测试的语句是:工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作

NLPIR/ICTCLAS2013的结果是:

工/n 信/n 处女/n 干事/n 每月/r 经过/p 下属/v 科室/n 都/d 要/v 亲口/d 交代/v 24/m 口/q 交换机/n 等/udeng 技术性/n 器件/n 的/ude1 安装/vn 工作/vn _

结巴中文分词的结果是:

工信处/n女干事/n每月/r经过/p下属/v科室/n都/d要/v亲口/n交代/n24/m口/n交换机/n等/u技术性/n器件/n的/uj安装/v工作/vn(分词及词性标注完成,耗时:1.93799996376秒。)

 

从以上的两个句子的分词来看结巴中文分词的结果都略好于NLPIR/ICTCLAS2013的结果,但是不能排除这两个是特例的可能性。而且可以看出结巴中文分词似乎是采取长词优先的方法所以会在长词错分成短词的情况下性能要好,但是也无法评价如果是其他的实验条件下这是否是个好的处理方式。

2 安装Python下的NLPIR/ICTCLAS2014

在32位,Windows7 ,Python2.7下安装最新的NLPIR/ICTCLAS2014。

具体步骤:

(1)下载链接http://ictclas.nlpir.org/downloads

(2)参照安装流程http://1988eiying.blog.163.com/blog/static/7232177620141233525469/,解压之后目录如下:

(3)将【Data】整个文件夹拷贝到【sample】--【pythonsample】下

(4)将【lib】文件夹里的各个型号的dll 拷贝到【pythonsample】 --【nlpir】里,替换原来的旧的dll,文件名字要对应更改,如拷过来的是win32下的NLPIR.dll,要对应的改成NLPIR32.dll 放到【pythonsample】 --【nlpir】里

(5)打开【pythonsample】里的nlpir.py ,将libFile = './nlpir/NLPIR64.dll' 这一句 里的dll改成对应自己系统版本的dll,例如是32位的,就改成libFile= './nlpir/NLPIR32.dll'

(6)将Data,nlpir,__init__.py,nlpir.py拷贝到项目代码下,运行nlpir.py测试是否可以分词

(7)在ICTCLAS2014Test.py中import nlpir用于实测,与结巴中文分词进行比较

#coding=utf-8
'''
Created on 2014-3-19
测试NLPIR/ICTCLAS2014分词工具
@author: liTC
'''
import nlpir
import time
 
t1=time.time()
#f=open("t_with_splitter.txt","r")#读取文本
#string=f.read().decode("utf-8")
string='工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作'
words =nlpir.Seg(string) #进行分词
result=""  #记录最终结果的变量
for w in words:
     result+= w[0]+"/"+w[1]#加词性标注
print result
f=open("t_with_POS_tag.txt","w")  #将结果保存到另一个文档中
f.write(result)
f.close()
t2=time.time()
print("分词及词性标注完成,耗时:"+str(t2-t1)+"秒。") #反馈结果

测试一:

测试的语句是:“祖籍浙江省温州市,1975年2月28日出生于浙江温州,歌手。1987年考上浙江温州清县小百花越剧团,在团里唱小生。”

NLPIR/ICTCLAS2014的结果是:

祖籍/n浙江省/ns温州市/ns,/wd1975年/t2月/t28日/t出生/vi于/p浙江/ns温州/ns,/wd歌手/n。/wj1987年/t考上/v浙江/ns温州/ns清/a县/n小/a百花/n越剧团/n,/wd在/p团里/n唱/v小生/n。/wj(分词及词性标注完成,耗时:0.00100016593933秒)

测试二:

测试的语句是:工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作

NLPIR/ICTCLAS2014的结果是:

工/n信/n处女/n干事/n每月/r经过/p下属/v科室/n都/d要/v亲口/d交代/v24/m口/q交换机/n等/udeng技术性/n器件/n的/ude1安装/vn工作/vn(分词及词性标注完成,耗时:0.00200009346008秒。)

从以上的两个句子的分词来看NLPIR/ICTCLAS2014相对于NLPIR/ICTCLAS2013结果几乎没有变化,结巴中文分词的结果都略好于NLPIR/ICTCLAS2014的结果,但是NLPIR/ICTCLAS2014要比结巴中文分词至少快1000倍,如果用于科研结巴中文分词或许可以获得容忍,但是要是用于产品,绝对是选NLPIR/ICTCLAS2014。

 PS:两个分词工具我都会上传到我的资源里,试试吧

 

相关文章推荐

[python] 使用Jieba工具中文分词及文本聚类概念

这篇文章主要是爬取百度5A景区摘要信息,再利用Jieba分词工具进行中文分词,最后提出文本聚类算法的一些概念知识。一. Selenium爬取百度百科摘要 二. Jieba中文分词 1.安装及入门介绍 ...

Python 结巴分词 关键词抽取分析

1 简介 关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看...

结巴中文分词使用学习(python)

中文分词工具:结巴分词 github地址:https://github.com/fxsjy/jieba一、分词功能 精确模式(默认):试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可...

清华THULAC分词软件python版使用

在使用结巴分词时候感觉在实验时候不太准确,所以试试其他的分词软件。大概去年五月份接触清华这个分词软件,不过当时没学过python,其他语言也用的不好,所以对如何编译和安装它显得十分笨重,所以今天再次去...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

对Python中文分词模块结巴分词算法过程的理解和分析

结巴分词是国内程序员用python开发的一个中文分词模块, 源码已托管在github, 地址在: https://github.com/fxsjy/jieba 作者的文档写的不是很全, 只写了怎么用...
  • rav009
  • rav009
  • 2013年09月30日 15:23
  • 34708

python中结巴分词快速入门

全几天看到高手下了个jieba分词快速入门的东西  ,希望关注我博客的人也能看得到 https://github.com/SalutLyndon/hello-world/blob/maste...

Python分词并进行词频统计

strs='1、大专以上学历,年龄在18-28岁之间;2、计算机相关专业、自动化、测控、生仪、机电、数学、物理等等理工科专业优先;' \ '3、热爱软件开发事业、有较强的逻辑思维能力,对IT...

【Python】用Python的“结巴”模块进行分词

之前都是用计算所的分词工具进行分词,效果不错但是比较麻烦,最近开始用Python的“结巴”模块进行分词,感觉非常方便。这里将我写的一些小程序分享给大家,希望对大家有所帮助。 下面这个程序是对一个文本文...

Python分词模块推荐:jieba中文分词

一、结巴中文分词采用的算法 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python下的中文分词实现
举报原因:
原因补充:

(最多只允许输入30个字)