分词是中文自然语言处理的基础。目前常用的分词算法有

1.张华平博士的NShort中文分词算法。

2.基于条件随机场(CRF)的中文分词算法。

这两种算法的代表工具包分别是jieba分词系统和哈工大的LTP语言技术平台。下面就分别演示这两个工具的使用方法。

jieba包有两个分词函数,cutcut_for_search,后者主要为搜索引擎设计,粒度更细。jieba.cut(sentence,cut_all=False,HMM=True) 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型。

pyltp包的分词模块只有一个分词函数,Segmentor.segment(line)只有一个参数:需要分词的字符串。

#coding:utf-8
import jieba
from pyltp import Segmentor text='奎金斯距离祭台很近,加拉塔“掉落”的部分事物就在他的面前,他下意识就捡起了其中一块金属碎屑般的事物和小片黑色固体。' segs1=jieba.cut(text)
print('|'.join(segs1))
segs1=jieba.cut_for_search(text)
print('|'.join(segs1)) segmentor=Segmentor() #实例化分词模块
segmentor.load("D:\\ltp_data\\cws.model")
segs2=segmentor.segment(text)
print('|'.join(segs2))
segmentor.release() #释放模型

分词的结果如下:

奎金斯|距离|祭台|很近|,|加|拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|下意识|就|捡起|了|其中|一块|金属|碎屑|般的|事物|和|小片|黑色|固体|。

奎金斯|距离|祭台|很近|,|加|拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|意识|下意识|就|捡起|了|其中|一块|金属|碎屑|般的|事物|和|小片|黑色|固体|。

奎金斯|距离|祭台|很|近|,|加拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|下|意识|就|捡|起|了|其中|一|块|金属|碎屑|般|的|事物|和|小|片|黑色|固体|。

可以看到,默认的分词方法还是有一些瑕疵,jieba分词结果里,“加拉塔”被分割成了两部分,pyltp的结果里,“般的”被分割成了两部分。为了更好地分词,两个工具包都提供了调整词典、添加词典的功能。

jieba里调整词典的函数是jieba.add_word(word,freq=None,tag=None),它接受三个参数:新词,词频,词性。jieba还可以添加自定义词典,jieba.load_userdict(f),f是一个txt文档,要求是utf-8编码。词典格式为一个词占一行,每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。

pyltp在加载模型的同时,可加载自定义词典。Segmentor. load_with_lexicon(model_path,user_dict)第一个参数自带的模型文件,第二个参数是自定义词典。词典格式为一个词为一行,第一列是词,第二列到第n列是该词的候选词性。

本次分词,jieba、pyltp的自定义词典都是只有词,其他省略。词典内容如下:

下意识

加拉塔

调整词典后的分词代码如下:

#coding:utf-8
import jieba
from pyltp import Segmentor
from pyltp import CustomizedSegmentor text='奎金斯距离祭台很近,加拉塔“掉落”的部分事物就在他的面前,他下意识就捡起了其中一块金属碎屑般的事物和小片黑色固体。' jieba.add_word('奎金斯')
jieba.add_word('加拉塔')
segs1=jieba.cut(text)
print('|'.join(segs1)) jieba.load_userdict('userdict_jieba.txt')
segs1=jieba.cut(text)
print('|'.join(segs1)) segmentor=Segmentor()
cws_model="D:\\ltp_data\\cws.model"
user_dict="userdict_ltp.txt"
segmentor.load_with_lexicon(cws_model,user_dict)
segs2=segmentor.segment(text)
print('|'.join(segs2))
segmentor.release()

分词结果:

奎金斯|距离|祭台|很近|,|加拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|下意识|就|捡起|了|其中|一块|金属|碎屑|般的|事物|和|小片|黑色|固体|。

奎金斯|距离|祭台|很近|,|加拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|下意识|就|捡起|了|其中|一块|金属|碎屑|般的|事物|和|小片|黑色|固体|。

[INFO] 2018-04-21 17:49:06 loaded 2 lexicon e

奎金斯|距离|祭台|很|近|,|加拉塔|“|掉落|”|的|部分|事物|就|在|他|的|面前|,|他|下意识|就|捡|起|了|其中|一|块|金属|碎屑|般|的|事物|和|小|片|黑色|固体|。

除了添加自定义词典,pyltp还可以个性化分词。个性化分词为了解决测试数据切换到如小说、财经等不同于新闻领域的领域。 在切换到新领域时,用户只需要标注少量数据。 个性化分词会在原有新闻数据基础之上进行增量训练。 从而达到即利用新闻领域的丰富数据,又兼顾目标领域特殊性的目的。

pyltp 支持使用用户训练好的个性化模型。关于个性化模型的训练需使用 LTP,详细介绍和训练方法请参考http://ltp.readthedocs.org/zh_CN/latest/theory.html#customized-cws-reference-label。

nlp中文分词(jieba和pyltp)的更多相关文章

  1. NLP & 中文分词

    NLP & 中文分词 中文分词 (Word Segmentation, WS) 指的是将汉字序列切分成词序列. 中文自然语言处理系统 https://www.ltp-cloud.com/int ...

  2. .net中文分词 jieba.NET

    简介 平时经常用Python写些小程序.在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词.jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以 ...

  3. Python中文分词 jieba

    三种分词模式与一个参数 以下代码主要来自于jieba的github,你可以在github下载该源码 import jieba seg_list = jieba.cut("我来到北京清华大学& ...

  4. 中文分词-jieba

    支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析: 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义: 搜索引擎模式,在精确模式的基础上,对长词再次切分 ...

  5. NLP自然语言处理 jieba中文分词,关键词提取,词性标注,并行分词,起止位置,文本挖掘,NLP WordEmbedding的概念和实现

    1. NLP 走近自然语言处理 概念 Natural Language Processing/Understanding,自然语言处理/理解 日常对话.办公写作.上网浏览 希望机器能像人一样去理解,以 ...

  6. 中文分词库及NLP介绍,jieba,gensim的一些介绍

    六款中文分词软件介绍: https://blog.csdn.net/u010883226/article/details/80731583 里面有jieba, pyltp什么的.另外下面这个博客有不少 ...

  7. 中文分词工具探析(二):Jieba

    1. 前言 Jieba是由fxsjy大神开源的一款中文分词工具,一款属于工业界的分词工具--模型易用简单.代码清晰可读,推荐有志学习NLP或Python的读一下源码.与采用分词模型Bigram + H ...

  8. jieba中文分词(python)

    问题小结 1.安装 需要用到python,根据python2.7选择适当的安装包.先下载http://pypi.python.org/pypi/jieba/ ,解压后运行python setup.py ...

  9. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...

随机推荐

  1. 【重学计算机】操作系统D6章:并发程序设计

    1. 并发程序的基本概念 程序顺序性 内部顺序性:CPU严格按照顺序执行指令 外部顺序性:程序员设计程序时往往用顺序设计的思想 顺序程序特性 程序执行的顺序性 计算环境的封闭性: 程序执行时犹如独占资 ...

  2. 你真的理解 Spring Boot 项目中的 parent 吗?

    前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用: <parent> <groupId ...

  3. Maven把项目依赖的所有jar包都打到同一个jar中

    目录 1 使用maven-shade-plugin 2 推荐: 使用maven-assembly-plugin 3 扩展: Maven安装本地jar包到本地仓库 4 扩展: 手动生成jar包 5 扩展 ...

  4. FreeSql 新查询功能介绍

    FreeSql FreeSql 是一个功能强大的 NETStandard 库,用于对象关系映射程序(O/RM),提供了 CodeFirst/DbFirst/CURD/表达式函数/读写分离 等基础封装. ...

  5. 用Docker解决坑爹的环境搭建系列——postgresql

    sudo docker pull postgres mkdir -p /data/docker/pgsql sudo docker run -p 54321:5432 --name pgsql -v ...

  6. 学习 JavaScript (五)核心概念:语句

    语句 语句被称作是流控制语句,通常有标志性的一个或者多个关键字,if . do-while. while.for. for-in. label. break.continue.with.switch. ...

  7. C#开发APP,ToolBar控件在Smobiler中的使用方式【附案例源码】——Smobiler移动开发平台

    控件说明 底部工具栏控件. 效果演示 其他效果 该界面为仿淘宝UI制作的一个简单的UI模板,源码获取方式请拉至文章末尾. 特色属性 属性 属性说明 Direction(相对布局) 容器主轴方向. Fl ...

  8. jqgrid postData post方式累加参数,缓存了原来的数据

    今天做项目的时候发现一个问题,我们有一个筛选项,一个是VIP用户,一个是普通用户,还有一个是全部用户,首先看下我们的selection <select name="" id= ...

  9. JQuery --- 第二期 (jQuery属性操作)

    个人学习笔记 1.JQuery的内容选择器 <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  10. 将包含经纬度点位信息的Excel表格数据导入到ArcMap中并输出成shapefile

    将包含经纬信息的Excel表格数据,导入到ArcMap中并输出成shapefile,再进行后面的操作.使用这种方法可以将每一个包含经纬信息的数据在ArcMap中点出来. 一.准备数据 新建Excel表 ...