当前位置: 首页 > news >正文

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

本文将对三种中文分词工具进行使用尝试,这三种工具分别为:哈工大的LTP结巴分词以及北大的pkuseg

1、准备

首先我们先准备好环境,即需要安装三个模块:

  • pyltp
  • jieba
  • pkuseg
  • LTP的分词模型文件cws.model

在用户字典中添加以下5个词语:

经
少安
贺凤英
F-35战斗机
埃达尔·阿勒坎

2、测试代码

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

3、测试输出

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4、测试总结

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

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

  • 总的来说,三者的分词效果都很优秀,差距不是很大,但在自定义词典这块,无疑pkuseg的效果更加稳定些。

  • 有关pkuseg的介绍与使用,可以参考网址:https://github.com/lancopku/PKUSeg-python

http://www.lryc.cn/news/91659.html

相关文章:

  • Visual C++ 6.0环境开发PACS影像系统的技术指标和精准算法
  • 接口测试介绍以及用例编写
  • MATLAB迭代的三种方式以及相关案例举例
  • 测试替身Test Doubles的5类型(Mockito)
  • 【C++】链表
  • day42_jsp
  • JAVA面试八股整理——基础部分
  • 【JavaSE】Java基础语法(二十八):HashSet集合
  • 压缩感知重构之匹配追踪算法
  • 【SpinalHDL快速入门】4.6、复合类型之Vec
  • 探访世优科技数字人虚拟直播产品体系 | 世优开放日再次成功举行
  • 有奖励!2023陕西省首台(套)重大技术装备产品项目申报条件、认定材料
  • 2023/6/6总结
  • api习题
  • (STL之string)string类的用法详解
  • 基于RT-Thread快速上手SD NAND 虚拟文件系统
  • 性能测试实战
  • 【PWN · 总结】system返回shell(‘/bin/sh‘、‘sh‘、$(0))
  • 《庄子》笔记
  • 五、VBO、EBO 和 VAO
  • 数据库期末复习(7.2)查询优化
  • 深入探索:在std::thread中创建并管理QEventLoop的全面指南
  • 【Netty】Netty中的超时处理与心跳机制(十九)
  • 尚硅谷大数据hadoop教程_mapReduce
  • 一键启停脚本
  • 20230604_Hadoop命令操作练习
  • hashCode 与 equals(重要)?
  • 华为OD机试(2023.5新题) 需要打开多少监控器(java,py,c++,js)
  • 209.长度最小的子数组
  • react antd Modal里Form设置值不起作用