下载鸥 > 网站下载 > 开发教程 > Python

Python中文分词器准确度与性能测试(jieba、FoolNLTK、HanLP、THULAC、nlpir、ltp)

507 2021-05-20 02:00:01

收藏
Python中文分词器准确度与性能测试(jieba、FoolNLTK、HanLP、THULAC、nlpir、ltp)
国内知名度比较高的Python中文分词有哈工大LTP、中科院计算所NLPIR、清华大学THULAC和jieba。而这些Python中文分词到底哪个最强大,哪个效率最高呢?本文转载了csdn一位大佬的测评。

Python中文分词器准确度与性能测试(jieba、FoolNLTK、HanLP、THULAC、nlpir、ltp)

各大分词器介绍

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
 

Python中文分词库测试总结

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安装配置模型教程:https://blog.csdn.net/shuihupo/article/details/81545335

对于分词器的其他功能就可以在文章开头的链接查看,比如说哈工大的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]
 

下载鸥附注

不论是结巴分词,还是清华或其他分词,这些开源项目开发至今都有7 8年,词库也大多未曾更新。如果你的项目中可能涉及到较多的新词汇,那么肯定是无法准确分词的。这个时候,可能要看看其他保持更新与升级的词库。

原文链接:https://blog.csdn.net/shuihupo/article/details/81540433

本文地址:https://xzo.com.cn/develop/python/968.html

有帮助,很赞!

信息来源:cdsn
导出教程 下载word版教程
发表评论 共有条评论
关于Python

Python免费、开源、简单,且含有海量的库。其功能也十分强大,不仅可以做网站、做爬虫、还可以做大数据、做人脸识别,等等等等。如果是新手入门,我们建议是首选Python。

推荐Python开发教程
Python中文分词器准确度与性能测试(jieba、FoolNLTK、HanLP、THULAC、nlpir、ltp)
Python中文分词器准确度与性能测试(jieba、FoolNLTK、HanLP、THULAC、nlpir、ltp)

国内知名度比较高的Python中文分词有哈工大LTP、中科院计算所NLPIR、清华大...

0 506
结巴分词的全模式、精确模式和搜索引擎模式用法与实例
结巴分词的全模式、精确模式和搜索引擎模式用法与实例

结巴分词支持3种模式:全模式、精确模式和搜索引擎模式,不同的模式效果会有差...

0 330
python多线程的概念与好处
python多线程的概念与好处

但凡对电脑知识了解多一点的朋友可能就听说过进程,而如果对蜘蛛爬虫有了解,那...

0 380
怎样用python爬虫爬取百度搜索图片
怎样用python爬虫爬取百度搜索图片

python爬虫爬取百度图片是很多人python爬虫入门后一个重要的练手项目。一方...

40 335
python爬虫怎样入门?
python爬虫怎样入门?

爬虫软件很多,支持爬虫功能的语言也很多,而用python做爬虫,辅以包罗万象的pyth...

0 384
推荐插件
帝国cms联想词搜索高级搜索插件下载
帝国cms联想词搜索高级搜索插件下载

帝国CMS自带的搜索功能虽然强大,但也有很强的局限性 -- 必须关键词完全匹配...

0 601
帝国cms百度AI图像清晰度增强api接口对接插件
帝国cms百度AI图像清晰度增强api接口对接插件

通过本插件,可以实现帝国cms网站对接百度云api实现图像清晰度增强的功能。经...

0 392
帝国cms百度AI图像去雾api接口对接插件
帝国cms百度AI图像去雾api接口对接插件

通过本插件,可以实现帝国cms网站对接百度云api实现图像去雾的功能。经过实际...

0 349
帝国cms百度AI图像无损放大api接口对接插件
帝国cms百度AI图像无损放大api接口对接插件

通过本插件,可以实现帝国cms网站对接百度云api实现图像无损放大的功能。经过...

0 322
帝国cms自动生成文章新闻目录插件下载
帝国cms自动生成文章新闻目录插件下载

用户体验是我们的需求,百度蜘蛛的认可更是我们的需求。毕竟,没有收录排名,何来...

0 948
帝国cms访问统计ip地址链接与封禁插件下载
帝国cms访问统计ip地址链接与封禁插件下载

下载鸥开发了这款帝国cms封禁ip插件,自动记录访问情况,让我们可以更快的识别...

0 864
帝国cms纳米数据接口(足球比赛中最新数据)
帝国cms纳米数据接口(足球比赛中最新数据)

帝国cms 对接纳米数据(www.nami.com)接口,本接口主要接收、整理足球比赛实时数...

0 156
帝国cms在线考试系统模板插件
帝国cms在线考试系统模板插件

一直没看到好用的帝国cms在线考试插件,所以自己开发了一款。在线考试插件用...

0 1145
客服QQ:341553759
扫码咨询 常见问题 >
官方交流群:90432500
点击加入