Python 分词器测试(jieba、FoolNLTK、HanLP、THULAC)

版权声明:欢迎分享和转载,请注明出处 shuihupo:https://blog.csdn.net/shuihupo.同时,本博客部分会在云南省高校数据化运营管理工程中心博客同步。欢迎沟通交流:[email protected] https://blog.csdn.net/shuihupo/article/details/81540433

个人接触的分词器
安装
调用
jieba“结巴”中文分词:做最好的 Python 中文分词组件https://github.com/fxsjy/jieba
THULAC清华大学:一个高效的中文词法分析工具包
https://github.com/thunlp/THULAC-Python
FoolNLTK可能不是最快的开源中文分词,但很可能是最准的开源中文分词
https://github.com/rockyzhengwu/FoolNLTK
HanLP最高分词速度2,000万字/秒 https://github.com/hankcs/HanLP/wiki/%E8%A7%92%E8%89%B2%E6%A0%87%E6%B3%A8%E5%91%BD%E5%90%8D%E5%AE%9E%E4%BD%93
pip install pyhanlp
Ictclas 分词系统 - NLPIR汉语分词系统 http://ictclas.nlpir.org/
LTP https://www.ltp-cloud.com/
如下是测试代码及结果

#!/ Mypython
# -*- coding: utf-8 -*-
# @Time    : 2018/8/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)

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___________
WARNING:tensorflow:From D:\local\Anaconda3\lib\site-packages\tensorflow\contrib\learn\python\learn\datasets\base.py:198: retry (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.
Instructions for updating:
Use the retry module or similar alternatives.
[['结婚', '的', '和', '尚未', '结婚', '的', '确实', '在', '干扰分词', '啊']]
[['汽水', '不如', '果汁', '好喝', ' ']]
[['小白', '痴痴地', '在', '门前', '等', '小黑', '回来']]
[['本月', '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

效果对比

import  jieba
import fool
import thulac
from pyhanlp import *
thu1 = thulac.thulac()  # 默认模式
for sentence in testCases:
    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: 结婚/ 的/ 和/ 尚未/ 结婚/ 的/ 确实/ 在/ 干扰/ 分词/ 啊
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]
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]
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]

精简文本 效果对比

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]

猜你喜欢

转载自blog.csdn.net/shuihupo/article/details/81540433