当前位置: 首页 > 工具软件 > FoolNLTK > 使用案例 >

中文分词工具比较 6大中文分词器测试(哈工大LTP、中科院计算所NLPIR、清华大学THULAC和jieba、FoolNLTK、HanLP)

茅才
2023-12-01

中文分词工具比较 6大中文分词器测试(jieba、FoolNLTK、HanLP、THULAC、nlpir、ltp)

哈工大LTP、中科院计算所NLPIR、清华大学THULAC和jieba
个人接触的分词器
安装
调用
jieba“结巴”中文分词:做最好的 Python 中文分词组件https://github.com/fxsjy/jieba

THULAC清华大学:一个高效的中文词法分析工具包
https://github.com/thunlp/THULAC-Python

FoolNLTK可能不是最快的开源中文分词,但很可能是最准的开源中文分词
https://github.com/rockyzhengwu/FoolNLTK
教程:FoolNLTK 及 HanLP使用

HanLP最高分词速度2,000万字/秒 https://github.com/hankcs/HanLP/wiki/角色标注命名实体
pip install pyhanlp

**中科院 Ictclas 分词系统 - NLPIR汉语分词系统 http://ictclas.nlpir.org/

哈工大 LTP https://www.ltp-cloud.com/
LTP安装教程[python 哈工大NTP分词 安装pyltp 及配置模型(新)]**(https://blog.csdn.net/shuihupo/article/details/81545335)
如下是测试代码及结果

#!/ Mypython
# -*- coding: utf-8 -*-
# @Time    : 2018/12/5 22:19
# @Author  : LinYimeng
# @File    : fenci_ceshi.py
# @Software: PyCharm

下面测试的文本上是极易分词错误的文本,分词的效果在很大程度上就可以提现分词器的分词情况。接下来验证一下,分词器的宣传语是否得当吧。

import time

testCases=["结婚的和尚未结婚的确实在干扰分词啊",
           "汽水不如果汁好喝 ",
           "小白痴痴地在门前等小黑回来" ,
          "本月4日晚被人持刀捅伤,犯罪嫌疑人随身携带凶器。 伤口在胳膊上,神经受损,住院15天。 目前犯罪嫌疑人仍旧逍遥法外,请问当地派出所是否失职?",
          "改判被告人死刑立即执行",
          "宣判后,王小军提出上诉。江西省高级人民法院经依法开庭审理,于2013年3月14日以(2012)赣刑一终字第131号刑事裁定,驳回上诉,维持原判,并依法报请本院核准。本院依法组成合议庭,对本案进行了复核,并依法讯问了被告人。现已复核终结。",
          "王小军持一把螺丝刀朝陈某某的胸部戳刺两下,陈某某受伤后逃跑。王小军从旁边卖肉店砧板上拿起一把菜刀追赶未及,将菜刀扔向陈某某,未击中,后逃离现场。"
           ]

jieba 中文分词

print("_____________jieba___________")
import  jieba

t1 =time.time()
# 精确模式
for sentence in testCases:
    seg_list = jieba.cut(sentence)
    print("/ ".join(seg_list)) # 精确模式
t2 = time.time()
print("jieba time",t2-t1)
_____________jieba___________
结婚/ 的/ 和/ 尚未/ 结婚/ 的/ 确实/ 在/ 干扰/ 分词/ 啊
汽水/ 不如/ 果汁/ 好喝/  
小白/ 痴痴地/ 在/ 门前/ 等/ 小黑/ 回来
本月/ 4/ 日晚/ 被/ 人/ 持刀/ 捅/ 伤/ ,/ 犯罪/ 嫌疑人/ 随身携带/ 凶器/ 。/  / 伤口/ 在/ 胳膊/ 上/ ,/ 神经/ 受损/ ,/ 住院/ 15/ 天/ 。/  / 目前/ 犯罪/ 嫌疑人/ 仍旧/ 逍遥法外/ ,/ 请问/ 当地/ 派出所/ 是否/ 失职/ ?
改判/ 被告人/ 死刑/ 立即/ 执行
宣判/ 后/ ,/ 王小军/ 提出/ 上诉/ 。/ 江西省/ 高级人民法院/ 经/ 依法/ 开庭审理/ ,/ 于/ 2013/ 年/ 3/ 月/ 14/ 日以/ (/ 2012/ )/ 赣刑/ 一终/ 字/ 第/ 131/ 号/ 刑事/ 裁定/ ,/ 驳回上诉/ ,/ 维持原判/ ,/ 并/ 依法/ 报请/ 本院/ 核准/ 。/ 本院/ 依法/ 组成/ 合议庭/ ,/ 对/ 本案/ 进行/ 了/ 复核/ ,/ 并/ 依法/ 讯问/ 了/ 被告人/ 。/ 现已/ 复核/ 终结/ 。
王小军持/ 一把/ 螺丝刀/ 朝/ 陈/ 某某/ 的/ 胸部/ 戳/ 刺/ 两下/ ,/ 陈/ 某某/ 受伤/ 后/ 逃跑/ 。/ 王小军/ 从/ 旁边/ 卖/ 肉店/ 砧板/ 上/ 拿/ 起/ 一把/ 菜刀/ 追赶/ 未及/ ,/ 将/ 菜刀/ 扔/ 向/ 陈/ 某某/ ,/ 未/ 击中/ ,/ 后/ 逃离现场/ 。
jieba time 0.01699233055114746

thulac 中文分词

print("_____________thulac___________")
import thulac
t1 =time.time()
thu1 = thulac.thulac()  # 默认模式
for sentence in testCases:
    text = thu1.cut(sentence, text=True)  # 进行一句话分词
    print(text)
t2 = time.time()
print("thulac time",t2-t1)
_thulac___________
Model loaded succeed
结婚_v 的_u 和_c 尚未_d 结婚_v 的_u 确实_a 在_p 干扰_v 分词_n 啊_u
不_d 如果_c :_w  _v 汽水_n 不_d 如果_c 汁_v 好_a 喝_v  _u
小白_np 痴痴_a 地_u 在_p 门前_s 等_u 小_a 黑回_n 来_f
本月_t 4_t 晚_g 被_p 人_n 持_v 刀_n 捅_v 伤_v ,_w 犯罪_v 嫌疑人_n 随身_d 携带_v 凶器_n 。_w  _a 伤口_n 在_p 胳膊_n 上_f ,_w 神经_n 受损_v ,_w 住院_v 15_m 天_q 。_w  _v 目前_t 犯罪_v 嫌疑人_n 仍旧_d 逍遥法外_id ,_w 请问_v 当地_s 派出所_n 是_v 否_g 失职_v ?_w
改判_v 被告人_n 死刑_n 立即_d 执行_v
宣判_v 后_f ,_w 王小军_np 提出_v 上诉_v 。_w 江西省_ns 高级_a 人民法院_id 经_p 依法_d 开庭_v 审理_v ,_w 于_p 2013_t 3_t 14_t 以_p (_w 2012_m )_w 赣刑_v 一_m 终_q 字_n 第131_m 号_q 刑事_a 裁定_v ,_w 驳回_v 上诉_v ,_w 维持_v 原判_n ,_w 并_c 依法_d 报请_v 本院_r 核准_v 。_w 本院_r 依法_d 组成_v 合议庭_n ,_w 对_p 本案_r 进行_v 了_u 复核_v ,_w 并_c 依法_d 讯问_v 了_u 被告人_n 。_w 现_g 已_d 复核_v 终结_v 。_w
王小军_np 持_v 一_m 把_q 螺丝刀_n 朝_p 陈_np 某某_r 的_u 胸部_n 戳刺_v 两_m 下_q ,_w 陈_np 某某_r 受伤_v 后_f 逃跑_v 。_w 王小军_np 从_p 旁边_f 卖_v 肉店_n 砧板_n 上_f 拿_v 起_v 一_m 把_q 菜刀_n 追赶_v 未_d 及_v ,_w 将_p 菜刀_n 扔_v 向_p 陈_np 某某_r ,_w 未_d 击中_v ,_w 后_f 逃离_v 现场_s 。_w
thulac time 10.118737936019897在这里插入代码片

fool 中文分词

print("_____________fool___________")
import fool
t1 =time.time()
for sentence in testCases:
    print(fool.cut(sentence))
t2 = time.time()
print("fool time",t2-t1)
_____________fool___________
[['结婚', '的', '和', '尚未', '结婚', '的', '确实', '在', '干扰分词', '啊']]
[['汽水', '不如', '果汁', '好喝', ' ']]
[['小白', '痴痴地', '在', '门前', '等', '小黑', '回来']]
[['本月', '4日', '晚', '被', '人', '持刀', '捅伤', ',', '犯罪', '嫌疑人', '随身', '携带', '凶器', '。', ' ', '伤口', '在', '胳膊', '上', ',', '神经', '受损', ',', '住院', '15', '天', '。', ' ', '目前', '犯罪', '嫌疑人', '仍旧', '逍遥法外', ',', '请问', '当地', '派出所', '是否', '失职', '?']]
[['改判', '被告人', '死刑', '立即', '执行']]
[['宣判', '后', ',', '王小军', '提出', '上诉', '。', '江西省', '高级', '人民法院', '经', '依法', '开庭', '审理', ',', '于', '2013年', '3月', '14日', '以', '(', '2012', ')', '赣刑', '一', '终', '字', '第131', '号', '刑事', '裁定', ',', '驳回', '上诉', ',', '维持', '原判', ',', '并', '依法', '报请', '本院', '核准', '。', '本院', '依法', '组成', '合议庭', ',', '对', '本案', '进行', '了', '复核', ',', '并', '依法', '讯问', '了', '被告人', '。', '现', '已', '复核', '终结', '。']]
[['王小军', '持', '一', '把', '螺丝', '刀', '朝', '陈某某', '的', '胸部', '戳刺', '两', '下', ',', '陈某某', '受伤', '后', '逃跑', '。', '王小军', '从', '旁边', '卖', '肉店', '砧板', '上', '拿', '起', '一', '把', '菜', '刀', '追', '赶', '未', '及', ',', '将', '菜', '刀', '扔', '向', '陈某某', ',', '未', '击中', ',', '后', '逃离', '现场', '。']]
fool time 3.6987085342407227

HanLP 中文分词

print("_____________HanLP___________")
from pyhanlp import *
t1 =time.time()
for sentence in testCases:
    print(HanLP.segment(sentence))
t2 = time.time()
print("HanLP_ time",t2-t1)
_____________HanLP___________
[结婚/vi, 的/ude1, 和/cc, 尚未/d, 结婚/vi, 的/ude1, 确实/ad, 在/p, 干扰/vn, 分词/n, 啊/y]
[汽水/nf, 不如/v, 果汁/nf, 好喝/nz,  /w]
[小白/nz, 痴痴地/z, 在/p, 门前/s, 等/udeng, 小黑/nz, 回来/v]
[本月/r, 4/m, 日/b, 晚/t, 被/pbei, 人/n, 持刀/nz, 捅/v, 伤/v, ,/w, 犯罪嫌疑人/nz, 随身携带/nz, 凶器/n, 。/w,  /w, 伤口/n, 在/p, 胳膊/n, 上/f, ,/w, 神经/n, 受损/vi, ,/w, 住院/vn, 15/m, 天/qt, 。/w,  /w, 目前/t, 犯罪嫌疑人/nz, 仍旧/d, 逍遥法外/vl, ,/w, 请问/v, 当地/s, 派出所/nis, 是否/v, 失职/vi, ?/w]
[改判/v, 被告人/n, 死刑/n, 立即/d, 执行/v]
[宣判/v, 后/f, ,/w, 王小军/nr, 提出/v, 上诉/vn, 。/w, 江西省高级人民法院/nt, 经/p, 依法/d, 开庭审理/nz, ,/w, 于/p, 2013/m, 年/qt, 3月/t, 14/m, 日/b, 以/p, (/w, 2012/m, )/w, 赣/b, 刑/n, 一/m, 终/d, 字/n, 第/mq, 131/m, 号/q, 刑事/b, 裁定/vn, ,/w, 驳回上诉/nz, ,/w, 维持原判/nz, ,/w, 并/cc, 依法/d, 报请/v, 本院/n, 核准/v, 。/w, 本院/n, 依法/d, 组成/v, 合议庭/n, ,/w, 对/p, 本案/r, 进行/vn, 了/ule, 复核/vn, ,/w, 并/cc, 依法/d, 讯问/vn, 了/ule, 被告人/n, 。/w, 现已/v, 复核/vn, 终结/vi, 。/w]
[王小军/nr, 持/v, 一/m, 把/pba, 螺丝刀/n, 朝/t, 陈某某/nr, 的/ude1, 胸部/n, 戳/v, 刺/v, 两/m, 下/f, ,/w, 陈某某/nr, 受伤/vi, 后/f, 逃跑/v, 。/w, 王小军/nr, 从/p, 旁边/f, 卖/v, 肉店/nis, 砧板/n, 上/f, 拿起/v, 一/m, 把/pba, 菜刀/n, 追赶/v, 未及/v, ,/w, 将/d, 菜刀/n, 扔向/nz, 陈某某/nr, ,/w, 未/d, 击中/v, ,/w, 后/f, 逃离现场/n, 。/w]
HanLP_ time 2.227612018585205   

中科院分词 nlpir

print("_____________中科院nlpir___________")
import pynlpir  # 引入依赖包
pynlpir.open()  # 打开分词器
t1 =time.time()
for sentence in testCases:
    print(pynlpir.segment(sentence, pos_tagging=False) )  # 使用pos_tagging来关闭词性标注
t2 = time.time()
print("中科院nlpir time",t2-t1)
#使用结束后释放内存:
pynlpir.close()
_____________中科院nlpir___________
['结婚', '的', '和', '尚未', '结婚', '的', '确实', '在', '干扰', '分词', '啊']
['汽水', '不如', '果汁', '好', '喝']
['小', '白', '痴痴', '地', '在', '门前', '等', '小', '黑', '回来']
['本月', '4日', '晚', '被', '人', '持', '刀', '捅', '伤', ',', '犯罪', '嫌疑人', '随身', '携带', '凶器', '。', '伤口', '在', '胳膊', '上', ',', '神经', '受损', ',', '住院', '15', '天', '。', '目前', '犯罪', '嫌疑人', '仍旧', '逍遥法外', ',', '请问', '当地', '派出所', '是否', '失职', '?']
['改判', '被告人', '死刑', '立即', '执行']
['宣判', '后', ',', '王小军', '提出', '上诉', '。', '江西省', '高级人民法院', '经', '依法', '开庭', '审理', ',', '于', '2013年', '3月', '14日', '以', '(', '2012', ')', '赣', '刑', '一', '终', '字', '第131', '号', '刑事', '裁定', ',', '驳回', '上诉', ',', '维持', '原判', ',', '并', '依法', '报请', '本', '院', '核准', '。', '本', '院', '依法', '组成', '合议庭', ',', '对', '本案', '进行', '了', '复核', ',', '并', '依法', '讯问', '了', '被告人', '。', '现', '已', '复核', '终结', '。']
['王小军', '持', '一', '把', '螺丝刀', '朝', '陈', '某某', '的', '胸部', '戳', '刺', '两', '下', ',', '陈', '某某', '受伤', '后', '逃跑', '。', '王小军', '从', '旁边', '卖', '肉', '店', '砧板', '上', '拿', '起', '一', '把', '菜刀', '追赶', '未', '及', ',', '将', '菜刀', '扔', '向', '陈', '某某', ',', '未', '击中', ',', '后', '逃离', '现场', '。']
中科院nlpir time 0.003996372222900391

哈工大ltp

文档链接:https://pyltp.readthedocs.io/zh_CN/latest/api.html#id13

print("_____________哈工大ltp___________")
from pyltp import Segmentor
LTP_DATA_DIR = 'E:\MyLTP\ltp_data'  # ltp模型目录的路径、
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径,模型名称为`cws.model`
segmentor = Segmentor()  # 初始化实例
segmentor.load(cws_model_path)  # 加载模型
t1 =time.time()
for sentence in testCases:
    words = segmentor.segment(sentence)  # 分词结果,pyltp.VectorOfString object
    # s_fenci = list(words)
    # print('分词结果',list(words))
    s_fenci_str = '\t'.join(words)  # str
    print("哈工大",s_fenci_str)
t2 = time.time()
segmentor.release()  # 释放模型
哈工大 结婚			尚未	结婚		确实		干扰	分词	
哈工大 汽水		如果			
哈工大 小白痴痴			门前		小黑	回来
哈工大 本月	4								,	犯罪	嫌疑人	随身	携带	凶器		伤口		胳膊		,	神经	受损	,	住院	15			目前	犯罪	嫌疑人	仍旧	逍遥法外	,	请问	当地	派出所	是否	失职	?
哈工大 改判	被告人	死刑	立即	执行
哈工大 宣判			王小军	提出	上诉		江西省	高级	人民法院		依法	开庭	审理			2013	3	14			2012		赣刑		终字	第131		刑事	裁定		驳回	上诉		维持	原判			依法	报请	本院	核准	。本院	依法	组成	合议庭			本案	进行		复核			依法	讯问		被告人				复核	终结	
哈工大 王小军				螺丝刀			某某		胸部							某某	受伤		逃跑		王小军		旁边		肉店	砧板						菜刀	追赶					菜刀				某某			击中			逃离	现场	
哈工大ltp  time 0.09294390678405762

以上可以看出分词的时间,为了方便比较进行如下操作:

分词效果对比

#!/ Mypython
# -*- coding: utf-8 -*-
# @Time    : 2018/12/5 22:19
# @Author  : LinYimeng
# @File    : fenci_ceshi.py
# @Software: PyCharm


import time

testCases=["结婚的和尚未结婚的确实在干扰分词啊",
           "汽水不如果汁好喝 ",
           "小白痴痴地在门前等小黑回来" ,
          "本月4日晚被人持刀捅伤,犯罪嫌疑人随身携带凶器。 伤口在胳膊上,神经受损,住院15天。 目前犯罪嫌疑人仍旧逍遥法外,请问当地派出所是否失职?",
          "改判被告人死刑立即执行",
          "宣判后,王小军提出上诉。江西省高级人民法院经依法开庭审理,于2013年3月14日以(2012)赣刑一终字第131号刑事裁定,驳回上诉,维持原判,并依法报请本院核准。本院依法组成合议庭,对本案进行了复核,并依法讯问了被告人。现已复核终结。",
          "王小军持一把螺丝刀朝陈某某的胸部戳刺两下,陈某某受伤后逃跑。王小军从旁边卖肉店砧板上拿起一把菜刀追赶未及,将菜刀扔向陈某某,未击中,后逃离现场。"
           ]

#中文分词
print("_____________jieba___________")
import  jieba
t1 =time.time()
# 精确模式
for sentence in testCases:
    seg_list = jieba.cut(sentence)
    print(seg_list )
    print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
t2 = time.time()
print("jieba time",t2-t1)
print("_____________thulac___________")
import thulac
t1 =time.time()
thu1 = thulac.thulac()  # 默认模式
for sentence in testCases:
    text = thu1.cut(sentence, text=True)  # 进行一句话分词
    print(text)
t2 = time.time()
print("thulac time",t2-t1)
print("_____________fool___________")
import fool
t1 =time.time()
for sentence in testCases:
    print(fool.cut(sentence))
t2 = time.time()
print("fool time",t2-t1)

print("_____________HanLP___________")
from pyhanlp import *
t1 =time.time()
for sentence in testCases:
    print(HanLP.segment(sentence))
t2 = time.time()
print("hanlp time",t2-t1)

print("_____________中科院nlpir___________")
import pynlpir  # 引入依赖包
pynlpir.open()  # 打开分词器
t1 =time.time()
for sentence in testCases:
    print(pynlpir.segment(sentence, pos_tagging=False) )  # 使用pos_tagging来关闭词性标注
t2 = time.time()
print("中科院nlpir time",t2-t1)
#使用结束后释放内存:
pynlpir.close()

print("_____________哈工大ltp___________")
from pyltp import Segmentor
LTP_DATA_DIR = 'E:\MyLTP\ltp_data'  # ltp模型目录的路径、
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径,模型名称为`cws.model`
segmentor = Segmentor()  # 初始化实例
segmentor.load(cws_model_path)  # 加载模型
t1 =time.time()
for sentence in testCases:
    words = segmentor.segment(sentence)  # 分词结果,pyltp.VectorOfString object
    # s_fenci = list(words)
    # print('分词结果',list(words))
    s_fenci_str = '\t'.join(words)  # str
    print("哈工大",s_fenci_str)
t2 = time.time()
print("哈工大ltp",)
segmentor.release()  # 释放模型



thu1 = thulac.thulac()  # 默认模式
pynlpir.open()  # 打开中科院分词器
segmentor = Segmentor()  # 哈工大分词器初始化实例
segmentor.load(cws_model_path)  # 加载模型
for sentence in testCases:
    print("_______****___________")
    seg_list = jieba.cut(sentence)
    print("jieba: " + "/ ".join(seg_list)) # 精确模式
    text = thu1.cut(sentence, text=True)  # 进行一句话分词
    print("thulac",text)
    print("fool",fool.cut(sentence))
    print("HanLP",HanLP.segment(sentence))
    print("中科院",pynlpir.segment(sentence, pos_tagging=False))  # 使用pos_tagging来关闭词性标注
    #哈工大
    words = segmentor.segment(sentence)  # 分词结果,pyltp.VectorOfString object
    s_fenci_str = '\t'.join(words)  # str
    print("哈工大",s_fenci_str)
pynlpir.close()
segmentor.release()  # 释放模型

结果为:

_______****___________
jieba: 结婚/ 的/ 和/ 尚未/ 结婚/ 的/ 确实/ 在/ 干扰/ 分词/ 啊
thulac 结婚_v 的_u 和_c 尚未_d 结婚_v 的_u 确实_a 在_p 干扰_v 分词_n 啊_u
fool [['结婚', '的', '和', '尚未', '结婚', '的', '确实', '在', '干扰分词', '啊']]
HanLP [结婚/vi, 的/ude1, 和/cc, 尚未/d, 结婚/vi, 的/ude1, 确实/ad, 在/p, 干扰/vn, 分词/n, 啊/y]
中科院 ['结婚', '的', '和', '尚未', '结婚', '的', '确实', '在', '干扰', '分词', '啊']
哈工大 结婚	的	和	尚未	结婚	的	确实	在	干扰	分词	啊
_______****___________
jieba: 汽水/ 不如/ 果汁/ 好喝/  
thulac 汽水_n 不_d 如果_c 汁_v 好_a 喝_v  _u
fool [['汽水', '不如', '果汁', '好喝', ' ']]
HanLP [汽水/nf, 不如/v, 果汁/nf, 好喝/nz,  /w]
中科院 ['汽水', '不如', '果汁', '好', '喝']
哈工大 汽水	不	如果	汁	好	喝
_______****___________
jieba: 小白/ 痴痴地/ 在/ 门前/ 等/ 小黑/ 回来
thulac 小白_np 痴痴_a 地_u 在_p 门前_s 等_u 小_a 黑回_n 来_f
fool [['小白', '痴痴地', '在', '门前', '等', '小黑', '回来']]
HanLP [小白/nz, 痴痴地/z, 在/p, 门前/s, 等/udeng, 小黑/nz, 回来/v]
中科院 ['小', '白', '痴痴', '地', '在', '门前', '等', '小', '黑', '回来']
哈工大 小白痴痴	地	在	门前	等	小黑	回来
_______****___________
jieba: 本月/ 4/ 日晚/ 被/ 人/ 持刀/ 捅/ 伤/ ,/ 犯罪/ 嫌疑人/ 随身携带/ 凶器/ 。/  / 伤口/ 在/ 胳膊/ 上/ ,/ 神经/ 受损/ ,/ 住院/ 15/ 天/ 。/  / 目前/ 犯罪/ 嫌疑人/ 仍旧/ 逍遥法外/ ,/ 请问/ 当地/ 派出所/ 是否/ 失职/ ?
thulac 本月_t 4日_t 晚_g 被_p 人_n 持_v 刀_n 捅_v 伤_v ,_w 犯罪_v 嫌疑人_n 随身_d 携带_v 凶器_n 。_w  _a 伤口_n 在_p 胳膊_n 上_f ,_w 神经_n 受损_v ,_w 住院_v 15_m 天_q 。_w  _v 目前_t 犯罪_v 嫌疑人_n 仍旧_d 逍遥法外_id ,_w 请问_v 当地_s 派出所_n 是_v 否_g 失职_v ?_w
fool [['本月', '4日', '晚', '被', '人', '持刀', '捅伤', ',', '犯罪', '嫌疑人', '随身', '携带', '凶器', '。', ' ', '伤口', '在', '胳膊', '上', ',', '神经', '受损', ',', '住院', '15', '天', '。', ' ', '目前', '犯罪', '嫌疑人', '仍旧', '逍遥法外', ',', '请问', '当地', '派出所', '是否', '失职', '?']]
HanLP [本月/r, 4/m, 日/b, 晚/t, 被/pbei, 人/n, 持刀/nz, 捅/v, 伤/v, ,/w, 犯罪嫌疑人/nz, 随身携带/nz, 凶器/n, 。/w,  /w, 伤口/n, 在/p, 胳膊/n, 上/f, ,/w, 神经/n, 受损/vi, ,/w, 住院/vn, 15/m, 天/qt, 。/w,  /w, 目前/t, 犯罪嫌疑人/nz, 仍旧/d, 逍遥法外/vl, ,/w, 请问/v, 当地/s, 派出所/nis, 是否/v, 失职/vi, ?/w]
中科院 ['本月', '4日', '晚', '被', '人', '持', '刀', '捅', '伤', ',', '犯罪', '嫌疑人', '随身', '携带', '凶器', '。', '伤口', '在', '胳膊', '上', ',', '神经', '受损', ',', '住院', '15', '天', '。', '目前', '犯罪', '嫌疑人', '仍旧', '逍遥法外', ',', '请问', '当地', '派出所', '是否', '失职', '?']
哈工大 本月	4日	晚	被	人	持	刀	捅	伤	,	犯罪	嫌疑人	随身	携带	凶器	。	伤口	在	胳膊	上	,	神经	受损	,	住院	15	天	。	目前	犯罪	嫌疑人	仍旧	逍遥法外	,	请问	当地	派出所	是否	失职	?
_______****___________
jieba: 改判/ 被告人/ 死刑/ 立即/ 执行
thulac 改判_v 被告人_n 死刑_n 立即_d 执行_v
fool [['改判', '被告人', '死刑', '立即', '执行']]
HanLP [改判/v, 被告人/n, 死刑/n, 立即/d, 执行/v]
中科院 ['改判', '被告人', '死刑', '立即', '执行']
哈工大 改判	被告人	死刑	立即	执行
_______****___________
jieba: 宣判/ 后/ ,/ 王小军/ 提出/ 上诉/ 。/ 江西省/ 高级人民法院/ 经/ 依法/ 开庭审理/ ,/ 于/ 2013/ 年/ 3/ 月/ 14/ 日以/ (/ 2012/ )/ 赣刑/ 一终/ 字/ 第/ 131/ 号/ 刑事/ 裁定/ ,/ 驳回上诉/ ,/ 维持原判/ ,/ 并/ 依法/ 报请/ 本院/ 核准/ 。/ 本院/ 依法/ 组成/ 合议庭/ ,/ 对/ 本案/ 进行/ 了/ 复核/ ,/ 并/ 依法/ 讯问/ 了/ 被告人/ 。/ 现已/ 复核/ 终结/ 。
thulac 宣判_v 后_f ,_w 王小军_np 提出_v 上诉_v 。_w 江西省_ns 高级_a 人民法院_id 经_p 依法_d 开庭_v 审理_v ,_w 于_p 2013年_t 3月_t 14日_t 以_p (_w 2012_m )_w 赣刑_v 一_m 终_q 字_n 第131_m 号_q 刑事_a 裁定_v ,_w 驳回_v 上诉_v ,_w 维持_v 原判_n ,_w 并_c 依法_d 报请_v 本院_r 核准_v 。_w 本院_r 依法_d 组成_v 合议庭_n ,_w 对_p 本案_r 进行_v 了_u 复核_v ,_w 并_c 依法_d 讯问_v 了_u 被告人_n 。_w 现_g 已_d 复核_v 终结_v 。_w
fool [['宣判', '后', ',', '王小军', '提出', '上诉', '。', '江西省', '高级', '人民法院', '经', '依法', '开庭', '审理', ',', '于', '2013年', '3月', '14日', '以', '(', '2012', ')', '赣刑', '一', '终', '字', '第131', '号', '刑事', '裁定', ',', '驳回', '上诉', ',', '维持', '原判', ',', '并', '依法', '报请', '本院', '核准', '。', '本院', '依法', '组成', '合议庭', ',', '对', '本案', '进行', '了', '复核', ',', '并', '依法', '讯问', '了', '被告人', '。', '现', '已', '复核', '终结', '。']]
HanLP [宣判/v, 后/f, ,/w, 王小军/nr, 提出/v, 上诉/vn, 。/w, 江西省高级人民法院/nt, 经/p, 依法/d, 开庭审理/nz, ,/w, 于/p, 2013/m, 年/qt, 3月/t, 14/m, 日/b, 以/p, (/w, 2012/m, )/w, 赣/b, 刑/n, 一/m, 终/d, 字/n, 第/mq, 131/m, 号/q, 刑事/b, 裁定/vn, ,/w, 驳回上诉/nz, ,/w, 维持原判/nz, ,/w, 并/cc, 依法/d, 报请/v, 本院/n, 核准/v, 。/w, 本院/n, 依法/d, 组成/v, 合议庭/n, ,/w, 对/p, 本案/r, 进行/vn, 了/ule, 复核/vn, ,/w, 并/cc, 依法/d, 讯问/vn, 了/ule, 被告人/n, 。/w, 现已/v, 复核/vn, 终结/vi, 。/w]
中科院 ['宣判', '后', ',', '王小军', '提出', '上诉', '。', '江西省', '高级人民法院', '经', '依法', '开庭', '审理', ',', '于', '2013年', '3月', '14日', '以', '(', '2012', ')', '赣', '刑', '一', '终', '字', '第131', '号', '刑事', '裁定', ',', '驳回', '上诉', ',', '维持', '原判', ',', '并', '依法', '报请', '本', '院', '核准', '。', '本', '院', '依法', '组成', '合议庭', ',', '对', '本案', '进行', '了', '复核', ',', '并', '依法', '讯问', '了', '被告人', '。', '现', '已', '复核', '终结', '。']
哈工大 宣判	后	,	王小军	提出	上诉	。	江西省	高级	人民法院	经	依法	开庭	审理	,	于	2013年	3月	14日	以	(	2012	)	赣刑	一	终字	第131	号	刑事	裁定	,	驳回	上诉	,	维持	原判	,	并	依法	报请	本院	核准	。本院	依法	组成	合议庭	,	对	本案	进行	了	复核	,	并	依法	讯问	了	被告人	。	现	已	复核	终结	。
_______****___________
jieba: 王小军持/ 一把/ 螺丝刀/ 朝/ 陈/ 某某/ 的/ 胸部/ 戳/ 刺/ 两下/ ,/ 陈/ 某某/ 受伤/ 后/ 逃跑/ 。/ 王小军/ 从/ 旁边/ 卖/ 肉店/ 砧板/ 上/ 拿/ 起/ 一把/ 菜刀/ 追赶/ 未及/ ,/ 将/ 菜刀/ 扔/ 向/ 陈/ 某某/ ,/ 未/ 击中/ ,/ 后/ 逃离现场/ 。
thulac 王小军_np 持_v 一_m 把_q 螺丝刀_n 朝_p 陈_np 某某_r 的_u 胸部_n 戳刺_v 两_m 下_q ,_w 陈_np 某某_r 受伤_v 后_f 逃跑_v 。_w 王小军_np 从_p 旁边_f 卖_v 肉店_n 砧板_n 上_f 拿_v 起_v 一_m 把_q 菜刀_n 追赶_v 未_d 及_v ,_w 将_p 菜刀_n 扔_v 向_p 陈_np 某某_r ,_w 未_d 击中_v ,_w 后_f 逃离_v 现场_s 。_w
fool [['王小军', '持', '一', '把', '螺丝', '刀', '朝', '陈某某', '的', '胸部', '戳刺', '两', '下', ',', '陈某某', '受伤', '后', '逃跑', '。', '王小军', '从', '旁边', '卖', '肉店', '砧板', '上', '拿', '起', '一', '把', '菜', '刀', '追', '赶', '未', '及', ',', '将', '菜', '刀', '扔', '向', '陈某某', ',', '未', '击中', ',', '后', '逃离', '现场', '。']]
HanLP [王小军/nr, 持/v, 一/m, 把/pba, 螺丝刀/n, 朝/t, 陈某某/nr, 的/ude1, 胸部/n, 戳/v, 刺/v, 两/m, 下/f, ,/w, 陈某某/nr, 受伤/vi, 后/f, 逃跑/v, 。/w, 王小军/nr, 从/p, 旁边/f, 卖/v, 肉店/nis, 砧板/n, 上/f, 拿起/v, 一/m, 把/pba, 菜刀/n, 追赶/v, 未及/v, ,/w, 将/d, 菜刀/n, 扔向/nz, 陈某某/nr, ,/w, 未/d, 击中/v, ,/w, 后/f, 逃离现场/n, 。/w]
中科院 ['王小军', '持', '一', '把', '螺丝刀', '朝', '陈', '某某', '的', '胸部', '戳', '刺', '两', '下', ',', '陈', '某某', '受伤', '后', '逃跑', '。', '王小军', '从', '旁边', '卖', '肉', '店', '砧板', '上', '拿', '起', '一', '把', '菜刀', '追赶', '未', '及', ',', '将', '菜刀', '扔', '向', '陈', '某某', ',', '未', '击中', ',', '后', '逃离', '现场', '。']
哈工大 王小军	持	一	把	螺丝刀	朝	陈	某某	的	胸部	戳	刺	两	下	,	陈	某某	受伤	后	逃跑	。	王小军	从	旁边	卖	肉店	砧板	上	拿	起	一	把	菜刀	追赶	未	及	,	将	菜刀	扔	向	陈	某某	,	未	击中	,	后	逃离	现场	。

Process finished with exit code 0

总结:

1.时间上(不包括加载包的时间),对于相同的文本测试两次,四个分词器时间分别为:
jieba: 0.01699233055114746 1.8318662643432617
thulac : 10.118737936019897 8.155954599380493
fool: 2.227612018585205 2.892209053039551
HanLP: 3.6987085342407227 1.443108320236206
中科院nlpir:0.002994060516357422
哈工大ltp_ :0.09294390678405762

可以看出平均耗时最短的是中科院nlpir分词,最长的是thulac,时间的差异还是比较大的。

2.分词准确率上,通过分词效果操作可以看出
第一句:结婚的和尚未结婚的确实在干扰分词啊
四个分词器都表现良好,唯一不同的是fool将“干扰分词”合为一个词
第二句:汽水不如果汁好喝,重点在“不如果”,“”不如“” 和“”如果“” 在中文中都可以成词,但是在这个句子里是不如 与果汁 正确分词
jieba thulac fool HanLP
jieba、 fool 、HanLP正确 thulac错误
第三句: 小白痴痴地在门前等小黑回来,体现在人名的合理分词上
正确是:
小白/ 痴痴地/ 在/ 门前/ 等/ 小黑/ 回来
jieba、 fool 、HanLP正确,thulac在两处分词错误: 小白_np 痴痴_a 地_u 在_p 门前_s 等_u 小_a 黑回_n 来_f

第四句:是有关司法领域文本分词
发现HanLP的分词粒度比较大,fool分词粒度较小,导致fool分词在上有较大的误差。在人名识别上没有太大的差异,在组织机构名上分词,分词的颗粒度有一些差异,Hanlp在机构名的分词上略胜一筹。

六种分词器使用建议:

结巴因为其安装简单,有三种模式和其他功能,支持语言广泛,流行度比较高,且在操作文件上有比较好的方法好用python -m jieba news.txt > cut_result.txt
考虑代码迁移性问题,操作便捷性,就选jieba,这个包安装比较简单,普适性较强,也是入门分词器。
对命名实体识别要求较高的可以选择HanLP,根据说明其训练的语料比较多,载入了很多实体库,通过测试在实体边界的识别上有一定的优势。
中科院的分词,是学术界比较权威的,对比来看哈工大的分词器也具有比较高的优势。同时这两款分词器的安装虽然不难,但比较jieba的安装显得繁琐一点,代码迁移性会相对弱一点。哈工大分词器pyltp安装配置模型教程

对于分词器的其他功能就可以在文章开头的链接查看,比如说哈工大的pyltp在命名实体识别方面,可以输出标注的词向量,是非常方便基础研究的命名实体的标注工作。

使用: python -m jieba [options] filename
 
结巴命令行界面。
 
固定参数:
  filename              输入文件
 
可选参数:
  -h, --help            显示此帮助信息并退出
  -d [DELIM], --delimiter [DELIM]
                        使用 DELIM 分隔词语,而不是用默认的' / '。
                        若不指定 DELIM,则使用一个空格分隔。
  -p [DELIM], --pos [DELIM]
                        启用词性标注;如果指定 DELIM,词语和词性之间
                        用它分隔,否则用 _ 分隔
  -D DICT, --dict DICT  使用 DICT 代替默认词典
  -u USER_DICT, --user-dict USER_DICT
                        使用 USER_DICT 作为附加词典,与默认词典或自定义词典配合使用
  -a, --cut-all         全模式分词(不支持词性标注)
  -n, --no-hmm          不使用隐含马尔可夫模型
  -q, --quiet           不输出载入信息到 STDERR

精简文本 效果对比

short_Cases=[
    "本月4日晚被人持刀捅伤,犯罪嫌疑人随身携带凶器。当地派出所",
    "宣判后,王小军提出上诉。江西省高级人民法院经审核依法开庭审理",
    "于2013年3月14日以(2012)赣刑一终字第131号刑事裁定驳回上诉",
    "王小军持一把螺丝刀朝陈某某的胸部戳刺两下",
    "王小军从旁边卖肉店砧板上拿起一把菜刀追赶"]
short_Cases1=[
    "当地派出所产看其银行卡明细,发现其发展下线的资金异常,出具了文件检验鉴定书和物证检验报告。依据被害人QQ聊天记录,发现被害人李某丙,当晚22时许持机动车驾驶证,上述事实被告人行政处罚决定书"]
import  jieba
import fool
import thulac
from pyhanlp import *
thu1 = thulac.thulac()  # 默认模式
# for sentence in short_Cases:
for sentence in short_Cases1:
    seg_list = jieba.cut(sentence)
    print("jieba: " + "/ ".join(seg_list)) # 精确模式
    text = thu1.cut(sentence, text=True)  # 进行一句话分词
    print("thulac",text)
    print("fool",fool.cut(sentence))
    print("HanLP",HanLP.segment(sentence))
Model loaded succeed
jieba: 当地/ 派出所/ 产看/ 其/ 银行卡/ 明细/ ,/ 发现/ 其/ 发展/ 下线/ 的/ 资金/ 异常/ ,/ 出具/ 了/ 文件/ 检验/ 鉴定书/ 和/ 物证/ 检验/ 报告/ 。/ 依据/ 被害人/ QQ/ 聊天记录/ ,/ 发现/ 被害人/ 李某/ 丙/ ,/ 当晚/ 22/ 时/ 许持/ 机动车/ 驾驶证/ ,/ 上述事实/ 被告人/ 行政处罚/ 决定书
thulac 当地_s 派出所_n 产_v 看_v 其_r 银行_n 卡明细_ns ,_w 发现_v 其_r 发展_v 下_f 线_n 的_u 资金_n 异常_a ,_w 出具_v 了_u 文件_n 检验_v 鉴定书_n 和_c 物证_n 检验_v 报告_n 。_w 依据_p 被害人_n QQ_v 聊天_v 记录_n ,_w 发现_v 被害人_n 李某_np 丙_g ,_w 当晚_t 22时_t 许持_v 机动车_n 驾驶证_n ,_w 上述_a 事实_n 被告人_n 行政_n 处罚_v 决定书_n
fool [['当地', '派出所', '产', '看', '其', '银行卡', '明细', ',', '发现', '其', '发展', '下线', '的', '资金', '异常', ',', '出具', '了', '文件', '检验', '鉴定书', '和', '物证', '检验', '报告', '。', '依据', '被害人', 'QQ', '聊天', '记录', ',', '发现', '被害人', '李某丙', ',', '当晚', '22时', '许持', '机动车', '驾驶证', ',', '上述', '事实', '被告人', '行政', '处罚', '决定书']]
HanLP [当地/s, 派出所/nis, 产/v, 看/v, 其/rz, 银行卡/nz, 明细/b, ,/w, 发现/v, 其/rz, 发展/vn, 下线/n, 的/ude1, 资金/n, 异常/a, ,/w, 出具/v, 了/ule, 文件/n, 检验/vn, 鉴定书/n, 和/cc, 物证/n, 检验/vn, 报告/n, 。/w, 依据/n, 被害人/n, QQ/nx, 聊天记录/nz, ,/w, 发现/v, 被害人/n, 李某丙/nr, ,/w, 当晚/t, 22/m, 时许持/nr, 机动车/n, 驾驶证/n, ,/w, 上述事实/n, 被告人/n, 行政处罚/nz, 决定书/n]

另外,还有一个评测结果:(PaperWeekly http://www.sohu.com/a/120375125_465975)

 类似资料: