当前位置:   article > 正文

6大中文分词工具测试比较_hanlp 分词器、jieba(结巴)分词、哈工大的语言技术平台 ltp 及其语言云 ltp-clo

hanlp 分词器、jieba(结巴)分词、哈工大的语言技术平台 ltp 及其语言云 ltp-cloud

中文分词工具比较 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结果

_____________jieba___________
结婚/// 尚未/ 结婚// 确实// 干扰/ 分词/ 啊
汽水/ 不如/ 果汁/ 好喝/  
小白/ 痴痴地// 门前// 小黑/ 回来
本月/ 4/ 日晚/// 持刀/// ,/ 犯罪/ 嫌疑人/ 随身携带/ 凶器//  / 伤口// 胳膊// ,/ 神经/ 受损/ ,/ 住院/ 15///  / 目前/ 犯罪/ 嫌疑人/ 仍旧/ 逍遥法外/ ,/ 请问/ 当地/ 派出所/ 是否/ 失职/ ?
改判/ 被告人/ 死刑/ 立即/ 执行
宣判/// 王小军/ 提出/ 上诉// 江西省/ 高级人民法院// 依法/ 开庭审理/// 2013// 3// 14/ 日以// 2012// 赣刑/ 一终/// 131// 刑事/ 裁定// 驳回上诉// 维持原判/// 依法/ 报请/ 本院/ 核准// 本院/ 依法/ 组成/ 合议庭/// 本案/ 进行// 复核/// 依法/ 讯问// 被告人// 现已/ 复核/ 终结/ 。
王小军持/ 一把/ 螺丝刀/// 某某// 胸部/// 两下/// 某某/ 受伤// 逃跑// 王小军// 旁边// 肉店/ 砧板//// 一把/ 菜刀/ 追赶/ 未及/// 菜刀//// 某某/// 击中/// 逃离现场/ 。
jieba time 0.01699233055114746
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结果

_____________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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

fool 中文分词

print("_____________fool___________")
import fool
t1 =time.time()
for sentence in testCases:
    print(fool.cut(sentence))
t2 = time.time()
print("fool time",t2-t1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

结果

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

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

结果

_____________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   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

中科院分词 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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

结果

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

哈工大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()  # 释放模型
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

结果

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

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

分词效果对比

#!/ 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()  # 释放模型
  • 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
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101

结果

_______****___________
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', '号', '刑事', '裁定', ',', '驳回', '上诉', ',', '维持', '原判', ',', '并', '依法', '报请', '本', '院', '核准', '。', '本', '院', '依法', '组成', '合议庭', ',', '对', '本案', '进行', '了', '复核', ',', '并', '依法', '讯问', '了', '被告人', '。', '现', '已', '复核', '终结', '。']
哈工大 宣判	后	,	王小军	提出	上诉	。	江西省	高级	人民法院	经	依法	开庭	审理	,	于	2013314日	以	(	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]
中科院 ['王小军', '持', '一', '把', '螺丝刀', '朝', '陈', '某某', '的', '胸部', '戳', '刺', '两', '下', ',', '陈', '某某', '受伤', '后', '逃跑', '。', '王小军', '从', '旁边', '卖', '肉', '店', '砧板', '上', '拿', '起', '一', '把', '菜刀', '追赶', '未', '及', ',', '将', '菜刀', '扔', '向', '陈', '某某', ',', '未', '击中', ',', '后', '逃离', '现场', '。']
哈工大 王小军	持	一	把	螺丝刀	朝	陈	某某	的	胸部	戳	刺	两	下	,	陈	某某	受伤	后	逃跑	。	王小军	从	旁边	卖	肉店	砧板	上	拿	起	一	把	菜刀	追赶	未	及	,	将	菜刀	扔	向	陈	某某	,	未	击中	,	后	逃离	现场	。
  • 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

总结:

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

精简文本 效果对比

short_Cases=[
    "本月4日晚被人持刀捅伤,犯罪嫌疑人随身携带凶器。当地派出所",
    "宣判后,王小军提出上诉。江西省高级人民法院经审核依法开庭审理",
    "于2013年3月14日以(2012)赣刑一终字第131号刑事裁定驳回上诉",
    "王小军持一把螺丝刀朝陈某某的胸部戳刺两下",
    "王小军从旁边卖肉店砧板上拿起一把菜刀追赶"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
short_Cases1=[
    "当地派出所产看其银行卡明细,发现其发展下线的资金异常,出具了文件检验鉴定书和物证检验报告。依据被害人QQ聊天记录,发现被害人李某丙,当晚22时许持机动车驾驶证,上述事实被告人行政处罚决定书"]
  • 1
  • 2
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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
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]
  • 1
  • 2
  • 3
  • 4
  • 5

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

转载于https://blog.csdn.net/shuihupo/article/details/81540433

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/357540
推荐阅读
相关标签
  

闽ICP备14008679号