NLP(十三)中文分词工具的使用尝试
本文将对三种中文分词工具进行使用尝试,这三种工具分别为哈工大的LTP,结巴分词以及北大的pkuseg。
首先我们先准备好环境,即需要安装三个模块:pyltp, jieba, pkuseg以及LTP的分词模型文件cws.model。在用户字典中添加以下5个词语:
经
少安
贺凤英
F-35战斗机
埃达尔·阿勒坎
测试的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))
&emsp 对于第一句话,输出结果如下:
原文: 尽管玉亭成家以后,他老婆贺凤英那些年把少安妈欺负上一回又一回,怕老婆的玉亭连一声也不敢吭,但少安他妈不计较他。
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年', ',', '埃达尔·阿勒坎', '出生', '在', '土耳其', '首都', '安卡拉', ',', '但', '他', '的', '求学', '生涯', '多', '在', '美国', '度过', '。']
接着,对以上的测试情况做一个简单的总结:
用户词典方面:LTP和pkuseg的效果都很好,jieba的表现不尽如人意,这主要是因为自定义的字典的词语里面含有标点符号,关于该问题的解决办法,可以参考网址:https://blog.csdn.net/weixin_42471956/article/details/80795534
从第二句话的效果来看,pkuseg的分词效果应该是最好的,‘经’应该作为单个的词语切分出来,而LTP和jieba即使加了自定义词典,也没有效果,同理,‘F-35战斗机’也是类似的情形。
总的来说,三者的分词效果都很优秀,差距不是很大,但在自定义词典这块,无疑pkuseg的效果更加稳定些。笔者也会在以后的分词使用中多多考虑pkuseg~
有关pkuseg的介绍与使用,可以参考网址:https://github.com/lancopku/PKUSeg-python
注意:不妨了解下笔者的微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注~
NLP(十三)中文分词工具的使用尝试的更多相关文章
- 中文分词工具探析(二):Jieba
1. 前言 Jieba是由fxsjy大神开源的一款中文分词工具,一款属于工业界的分词工具--模型易用简单.代码清晰可读,推荐有志学习NLP或Python的读一下源码.与采用分词模型Bigram + H ...
- 开源中文分词工具探析(三):Ansj
Ansj是由孙健(ansjsun)开源的一个中文分词器,为ICTLAS的Java版本,也采用了Bigram + HMM分词模型(可参考我之前写的文章):在Bigram分词的基础上,识别未登录词,以提高 ...
- 开源中文分词工具探析(五):FNLP
FNLP是由Fudan NLP实验室的邱锡鹏老师开源的一套Java写就的中文NLP工具包,提供诸如分词.词性标注.文本分类.依存句法分析等功能. [开源中文分词工具探析]系列: 中文分词工具探析(一) ...
- 开源中文分词工具探析(五):Stanford CoreNLP
CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...
- 开源中文分词工具探析(六):Stanford CoreNLP
CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...
- 基于开源中文分词工具pkuseg-python,我用张小龙的3万字演讲做了测试
做过搜索的同学都知道,分词的好坏直接决定了搜索的质量,在英文中分词比中文要简单,因为英文是一个个单词通过空格来划分每个词的,而中文都一个个句子,单独一个汉字没有任何意义,必须联系前后文字才能正确表达它 ...
- 中文分词工具简介与安装教程(jieba、nlpir、hanlp、pkuseg、foolnltk、snownlp、thulac)
2.1 jieba 2.1.1 jieba简介 Jieba中文含义结巴,jieba库是目前做的最好的python分词组件.首先它的安装十分便捷,只需要使用pip安装:其次,它不需要另外下载其它的数据包 ...
- 中文分词工具探析(一):ICTCLAS (NLPIR)
1. 前言 ICTCLAS是张华平在2000年推出的中文分词系统,于2009年更名为NLPIR.ICTCLAS是中文分词界元老级工具了,作者开放出了free版本的源代码(1.0整理版本在此). 作者在 ...
- 开源中文分词工具探析(四):THULAC
THULAC是一款相当不错的中文分词工具,准确率高.分词速度蛮快的:并且在工程上做了很多优化,比如:用DAT存储训练特征(压缩训练模型),加入了标点符号的特征(提高分词准确率)等. 1. 前言 THU ...
随机推荐
- Zookeeper_ACL
getAcl path 查看某个node的权限 设置权限1 world方式 setAcl <path> world:anyone:<acl>例如 setAcl /node1 w ...
- python读取excel文件中所有sheet表格
sales: store: """(1)用load_workbook函数打开excel文件,返回一个工作簿对象 (2)用工作簿对象获取所有的sheet (3)第一个for ...
- 跟我学SpringCloud | 第七篇:Spring Cloud Config 配置中心高可用和refresh
SpringCloud系列教程 | 第七篇:Spring Cloud Config 配置中心高可用和refresh Springboot: 2.1.6.RELEASE SpringCloud: Gre ...
- redis整合springboot的helloworld
引入依赖 compile 'org.springframework.boot:spring-boot-starter-data-redis' 使用redis有两种方法 1.Jedis Jedis je ...
- POJ 1741:Tree(树上点分治)
题目链接 题意 给一棵边带权树,问两点之间的距离小于等于K的点对有多少个. 思路 <分治算法在树的路径问题中的应用> 图片转载于http://www.cnblogs.com/Paul-Gu ...
- git中常用的操作命令有哪些?常用操作命令归纳
git中常用的操作命令有哪些?本篇文章就给到大家归纳了一些git中常用操作命令.有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. git开始 全局配置:配置用户名和e-mail地址 1 ...
- 生产Server遭挖矿程序入侵,暴力占用CPU
区块链的火热,利益驱使必然导致不少PC或Server,被变成肉鸡,执行挖矿程序进行挖矿,进而导致我们正常的程序无法正常. (Centos7 Server)使用top命令查看服务器进程运行情况,发现几个 ...
- python文件下载
1. 场景描述 刚好总结Java项目的web文件下载(附方案及源码配置),想起python项目也有用到文件下载,就也介绍下吧. 2. 解决方案 使用python的第三方组件Flask来实现文件下载功能 ...
- 剑指offer第二版-4.二维数组中的查找
面试题4:二维数组中的查找 题目要求: 一个二维数组中,每一行从左到右递增,每一列从上到下递增.输入一个整数,判断数组中是否含有该整数 /** * @since 2019年2月13日 下午5:08:5 ...
- Java编程思想:内部类中级部分
public class Test { public static void main(String[] args) { // Parcel4Test.test(); // Parcel5_1.tes ...