NLP三种中文分词工具的对比使用

640?wx_fmt=jpeg


作者:jclian,喜欢算法,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!

本文将对三种中文分词工具进行使用尝试,这三种工具分别为哈工大的LTP,结巴分词以及北大的pkuseg。cws.model。在用户字典中添加以下5个词语:

测试的Python代码如下:

# -*- coding: utf-8 -*-

import os
import jieba
import pkuseg
from pyltp import Segmentor

lexicon = ['经', '少安', '贺凤英', 'F-35战斗机', '埃达尔·阿勒坎'] # 自定义词典

# 哈工大LTP分词
def ltp_segment(sent):
    # 加载文件
    cws_model_path = os.path.join('data/cws.model') # 分词模型路径,模型名称为`cws.model`
    lexicon_path = os.path.join('data/lexicon.txt') # 参数lexicon是自定义词典的文件路径
    segmentor = Segmentor()
    segmentor.load_with_lexicon(cws_model_path, lexicon_path)
    words = list(segmentor.segment(sent))
    segmentor.release()

    return words

# 结巴分词
def jieba_cut(sent):
    for word in lexicon:
        jieba.add_word(word)
    return list(jieba.cut(sent))

# pkuseg分词
def pkuseg_cut(sent):
    seg = pkuseg.pkuseg(user_dict=lexicon)
    words = seg.cut(sent)
    return words

sent = '尽管玉亭成家以后,他老婆贺凤英那些年把少安妈欺负上一回又一回,怕老婆的玉亭连一声也不敢吭,但少安他妈不计较他。'
#sent = '据此前报道,以色列于去年5月成为世界上第一个在实战中使用F-35战斗机的国家。'
#sent = '小船4月8日经长江前往小鸟岛。'
#sent = '1958年,埃达尔·阿勒坎出生在土耳其首都安卡拉,但他的求学生涯多在美国度过。'

print('ltp:', ltp_segment(sent))
print('jieba:', jieba_cut(sent))
print('pkuseg:', pkuseg_cut(sent))

对于第一句话,输出结果如下:

原文:  尽管玉亭成家以后,他老婆贺凤英那些年把少安妈欺负上一回又一回,怕老婆的玉亭连一声也不敢吭,但少安他妈不计较他。

ltp: ['尽管', '玉亭', '成家', '以后', ',', '他', '老婆', '贺凤英', '那些', '年', '把', '少安', '妈', '欺负', '上', '一', '回', '又', '一', '回', ',', '怕', '老婆', '的', '玉亭', '连', '一', '声', '也', '不', '敢', '吭', ',', '但', '少安', '他妈', '不', '计较', '他', '。']

jieba: ['尽管', '玉亭', '成家', '以后', ',', '他', '老婆', '贺凤英', '那些', '年', '把', '少安', '妈', '欺负', '上', '一回', '又', '一回', ',', '怕老婆', '的', '玉亭', '连', '一声', '也', '不敢', '吭', ',', '但少安', '他妈', '不', '计较', '他', '。']

pkuseg: ['尽管', '玉亭', '成家', '以后', ',', '他', '老婆', '贺凤英', '那些', '年', '把', '少安', '妈', '欺负', '上', '一', '回', '又', '一', '回', ',', '怕', '老婆', '的', '玉亭', '连', '一', '声', '也', '不', '敢', '吭', ',', '但', '少安', '他妈', '不', '计较', '他', '。']

对于第二句话,输出结果如下:

原文:  据此前报道,以色列于去年5月成为世界上第一个在实战中使用F-35战斗机的国家。

ltp: ['据', '此前', '报道', ',', '以色列', '于', '去年', '5月', '成为', '世界', '上', '第一', '个', '在', '实战', '中', '使用', 'F-35', '战斗机', '的', '国家', '。']

jieba: ['据此', '前', '报道', ',', '以色列', '于', '去年', '5', '月', '成为', '世界', '上', '第一个', '在', '实战', '中', '使用', 'F', '-', '35', '战斗机', '的', '国家', '。']

pkuseg: ['据', '此前', '报道', ',', '以色列', '于', '去年', '5月', '成为', '世界', '上', '第一', '个', '在', '实战', '中', '使用', 'F-35战斗机', '的', '国家', '。']

对于第三句话,输出结果如下:

原文:  小船4月8日经长江前往小鸟岛。

ltp: ['小船', '4月', '8日', '经长江', '前往', '小鸟岛', '。']

jieba: ['小船', '4', '月', '8', '日经', '长江', '前往', '小', '鸟岛', '。']

pkuseg: ['小船', '4月', '8日', '经', '长江', '前往', '小鸟', '岛', '。']

对于第四句话,输出结果如下:

原文:  1958年,埃达尔·阿勒坎出生在土耳其首都安卡拉,但他的求学生涯多在美国度过。

ltp: ['1958年', ',', '埃达尔·阿勒坎', '出生', '在', '土耳其', '首都', '安卡拉', ',', '但', '他', '的', '求学', '生涯', '多', '在', '美国', '度过', '。']

jieba: ['1958', '年', ',', '埃', '达尔', '·', '阿勒', '坎', '出生', '在', '土耳其', '首都', '安卡拉', ',', '但', '他', '的', '求学', '生涯', '多', '在', '美国', '度过', '。']

pkuseg: ['1958年', ',', '埃达尔·阿勒坎', '出生', '在', '土耳其', '首都', '安卡拉', ',', '但', '他', '的', '求学', '生涯', '多', '在', '美国', '度过', '。']

接着,对以上的测试情况做一个简单的总结:

  1. 用户词典方面:LTP和pkuseg的效果都很好,jieba的表现不尽如人意,这主要是因为自定义的字典的词语里面含有标点符号,关于该问题的解决办法,可以参考网址:https://blog.csdn.net/weixin_42471956/article/details/80795534

  2. 从第二句话的效果来看,pkuseg的分词效果应该是最好的,‘经’应该作为单个的词语切分出来,而LTP和jieba即使加了自定义词典,也没有效果,同理,‘F-35战斗机’也是类似的情形。

总的来说,三者的分词效果都很优秀,差距不是很大,但在自定义词典这块,无疑pkuseg的效果更加稳定些。笔者也会在以后的分词使用中多多考虑pkuseg~

640?wx_fmt=jpeg

▼ 点击成为社区注册会员          「在看」一下,一起PY!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值