前言

从本文开始,我们就要真正进入实战部分。首先,我们按照中文自然语言处理流程的第一步获取语料,然后重点进行中文分词的学习。中文分词有很多种,常见的比如有中科院计算所 NLPIR、哈工大 LTP、清华大学 THULAC 、斯坦福分词器、Hanlp 分词器、jieba 分词、IKAnalyzer 等。这里针对 jieba 和 HanLP 分别介绍不同场景下的中文分词应用。

jieba 分词

jieba 安装

(1)Python 2.x 下 jieba 的三种安装方式,如下:

  • 全自动安装:执行命令 easy_install jieba 或者 pip install jieba / pip3 install jieba,可实现全自动安装。

  • 半自动安装:先下载 jieba,解压后运行 python setup.py install

  • 手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录。

安装完通过 import jieba 验证安装成功与否。

(2)Python 3.x 下的安装方式。

Github 上 jieba 的 Python3.x 版本的路径是:https://github.com/fxsjy/jieba/tree/jieba3k。

通过 git clone https://github.com/fxsjy/jieba.git 命令下载到本地,然后解压,再通过命令行进入解压目录,执行 python setup.py install 命令,即可安装成功。

jieba 的分词算法

主要有以下三种:

  1. 基于统计词典,构造前缀词典,基于前缀词典对句子进行切分,得到所有切分可能,根据切分位置,构造一个有向无环图(DAG);
  2. 基于DAG图,采用动态规划计算最大概率路径(最有可能的分词结果),根据最大概率路径分词;
  3. 对于新词(词库中没有的词),采用有汉字成词能力的 HMM 模型进行切分。

jieba 分词

下面我们进行 jieba 分词练习,第一步首先引入 jieba 和语料:

    import jiebacontent = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。"

(1)精确分词

精确分词:精确模式试图将句子最精确地切开,精确分词也是默认分词。

segs_1 = jieba.cut(content, cut_all=False)
print("/".join(segs_1))

其结果为:

现如今/,/机器/学习/和/深度/学习/带动/人工智能/飞速/的/发展/,/并/在/图片/处理/、/语音/识别/领域/取得/巨大成功/。

(2)全模式

全模式分词:把句子中所有的可能是词语的都扫描出来,速度非常快,但不能解决歧义。

    segs_3 = jieba.cut(content, cut_all=True)print("/".join(segs_3))

结果为:

现如今/如今///机器/学习/和/深度/学习/带动/动人/人工/人工智能/智能/飞速/的/发展///并/在/图片/处理///语音/识别/领域/取得/巨大/巨大成功/大成/成功//

(3)搜索引擎模式

搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

    segs_4 = jieba.cut_for_search(content)print("/".join(segs_4))

结果为:

如今/现如今/,/机器/学习/和/深度/学习/带动/人工/智能/人工智能/飞速/的/发展/,/并/在/图片/处理/、/语音/识别/领域/取得/巨大/大成/成功/巨大成功/。

(4)用 lcut 生成 list

jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 Generator,可以使用 for 循环来获得分词后得到的每一个词语(Unicode)。jieba.lcut 对 cut 的结果做了封装,l 代表 list,即返回的结果是一个 list 集合。同样的,用 jieba.lcut_for_search 也直接返回 list 集合。

    segs_5 = jieba.lcut(content)print(segs_5)

结果为:

['现如今', ',', '机器', '学习', '和', '深度', '学习', '带动', '人工智能', '飞速', '的', '发展', ',', '并', '在', '图片', '处理', '、', '语音', '识别', '领域', '取得', '巨大成功', '。']

(5)获取词性

jieba 可以很方便地获取中文词性,通过 jieba.posseg 模块实现词性标注。

    import jieba.posseg as psgprint([(x.word,x.flag) for x in psg.lcut(content)])

结果为:

[('现如今', 't'), (',', 'x'), ('机器', 'n'), ('学习', 'v'), ('和', 'c'), ('深度', 'ns'), ('学习', 'v'), ('带动', 'v'), ('人工智能', 'n'), ('飞速', 'n'), ('的', 'uj'), ('发展', 'vn'), (',', 'x'), ('并', 'c'), ('在', 'p'), ('图片', 'n'), ('处理', 'v'), ('、', 'x'), ('语音', 'n'), ('识别', 'v'), ('领域', 'n'), ('取得', 'v'), ('巨大成功', 'nr'), ('。', 'x')]

(6)并行分词

并行分词原理为文本按行分隔后,分配到多个 Python 进程并行分词,最后归并结果。

用法:

jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数 。
jieba.disable_parallel() # 关闭并行分词模式 。

注意: 并行分词仅支持默认分词器 jieba.dt 和 jieba.posseg.dt。目前暂不支持 Windows。

(7)获取分词结果中词列表的 top n

    from collections import Countertop5= Counter(segs_5).most_common(5)print(top5)

结果为:

[(',', 2), ('学习', 2), ('现如今', 1), ('机器', 1), ('和', 1)]

(8)自定义添加词和字典

默认情况下,使用默认分词,是识别不出这句话中的“铁甲网”这个新词,这里使用用户字典提高分词准确性。

    txt = "铁甲网是中国最大的工程机械交易平台。"print(jieba.lcut(txt))

结果为:

['铁甲', '网是', '中国', '最大', '的', '工程机械', '交易平台', '。']

如果添加一个词到字典,看结果就不一样了。

    jieba.add_word("铁甲网")print(jieba.lcut(txt))

结果为:

['铁甲网', '是', '中国', '最大', '的', '工程机械', '交易平台', '。']

但是,如果要添加很多个词,一个个添加效率就不够高了,这时候可以定义一个文件,然后通过 load_userdict()函数,加载自定义词典,如下:

    jieba.load_userdict('user_dict.txt')print(jieba.lcut(txt))

结果为:

['铁甲网', '是', '中国', '最大', '的', '工程机械', '交易平台', '。']

注意事项:

jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型。

jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。

HanLP 分词

pyhanlp 安装

其为 HanLP 的 Python 接口,支持自动下载与升级 HanLP,兼容 Python2、Python3。

安装命令为 pip install pyhanlp,使用命令 hanlp 来验证安装。

pyhanlp 目前使用 jpype1 这个 Python 包来调用 HanLP,如果遇到:

building '_jpype' extensionerror: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft VisualC++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

则推荐利用轻量级的 Miniconda 来下载编译好的 jpype1。

    conda install -c conda-forge jpype1pip install pyhanlp

未安装 Java 时会报错

jpype.jvmfinder.JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVAHOME environment variable properly.

HanLP 主项目采用 Java 开发,所以需要 Java 运行环境,请安装 JDK。

命令行交互式分词模式

在命令行界面,使用命令 hanlp segment 进入交互分词模式,输入一个句子并回车,HanLP 会输出分词结果:

可见,pyhanlp 分词结果是带有词性的。

服务器模式

通过 hanlp serve 来启动内置的 HTTP 服务器,默认本地访问地址为:http://localhost:8765 。

也可以访问官网演示页面:http://hanlp.hankcs.com/。

通过工具类 HanLP 调用常用接口

通过工具类 HanLP 调用常用接口,这种方式应该是我们在项目中最常用的方式。

(1)分词

    from pyhanlp import *content = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。"print(HanLP.segment(content))

结果为:

[现如今/t, ,/w, 机器学习/gi, 和/cc, 深度/n, 学习/v, 带动/v, 人工智能/n, 飞速/d, 的/ude1, 发展/vn, ,/w, 并/cc, 在/p, 图片/n, 处理/vn, 、/w, 语音/n, 识别/vn, 领域/n, 取得/v, 巨大/a, 成功/a, 。/w]

(2)自定义词典分词

在没有使用自定义字典时的分词。

    txt = "铁甲网是中国最大的工程机械交易平台。"print(HanLP.segment(txt))

结果为:

[铁甲/n, 网/n, 是/vshi, 中国/ns, 最大/gm, 的/ude1, 工程/n, 机械/n, 交易/vn, 平台/n, 。/w]

添加自定义新词:

    CustomDictionary.add("铁甲网")CustomDictionary.insert("工程机械", "nz 1024")CustomDictionary.add("交易平台", "nz 1024 n 1")print(HanLP.segment(txt))

结果为:

[铁甲网/nz, 是/vshi, 中国/ns, 最大/gm, 的/ude1, 工程机械/nz, 交易平台/nz, 。/w]

当然了,jieba 和 pyhanlp 能做的事还有很多,关键词提取、自动摘要、依存句法分析、情感分析等,后面章节我们将会讲到,这里不再赘述。

参考文献:

  1. https://github.com/fxsjy/jieba
  2. https://github.com/hankcs/pyhanlp

第02课:简单好用的中文分词利器 jieba 和 HanLP相关推荐

  1. NLP第2课:中文分词利器 jieba 和 HanLP

    前言 从本文开始,我们进入实战部分.首先,我们按照中文自然语言处理流程的第一步获取语料,然后重点进行中文分词的学习.中文分词有很多种,常见的比如有中科院计算所 NLPIR.哈工大 LTP.清华大学 T ...

  2. 3、Python 中文分词组件Jieba

    在自然语言处理中,分词是一项最基本的技术.中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语以字为基本书写单位,词语之间没有明显的区分标记,需要人为切分.现在开源的中文分词工具有 ...

  3. NLP算法-中文分词工具-Jieba

    中文分词工具-Jieba 什么是Jieba? 1.Jieba 的特点 2.Jieba 分词的原理 3.Jieba 分词的三种模式 使用 Jieba 库进行分词 代码示例 测试说明 demo 什么是Ji ...

  4. 中文分词工具—Jieba

    中文分词-Jieba 是一款Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segm ...

  5. [工具]python中文分词---【jieba】

    jieba "结巴"中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") C ...

  6. Tensorflow2.0(2):中文分词(jieba)

    目录 中文分词的难点 中文分词方法 简单使用 三种分词模式 结巴分词使用 结巴分词使用 目前中文分词一共有三种方式进行实现: jieba (结巴分词) THULAC(清华大学自然语言处理与社会人文计算 ...

  7. 当下流行的中文分词模块jieba

    当前流行的中文分词模块包括 Jieba 分词:Jieba 是用 Python 实现的开源中文分词库,支持三种分词模式:精确模式.全模式和搜索引擎模式,并且支持自定义词典. THULAC 分词:THUL ...

  8. 中文分词工具jieba分词器的使用

    1.常见的中文分词工具 中科院计算所的NLPIR 哈工大LTP 清华大学THULAC 斯坦福分词器 Hanlp分词器 jieba分词 IKAnalyzer 2.jieba分词算法主要有以下三种: 1. ...

  9. python中文分词之jieba分词的使用

    文章目录 1.特点 2.安装说明 安装示例 下载: 安装: 测试: 3.算法 4.主要功能 (1)分词 (2)添加自定义词典 载入词典 调整词典 (3)关键词提取 一.基于 TF-IDF 算法的关键词 ...

最新文章

  1. Docker最全教程——从理论到实战(六)
  2. 测试和恢复性的争论:面向对象vs.函数式编程
  3. Ubuntu18.04安装Multiwfn
  4. Android底层隐私数据,Android Intent传递数据底层分析详细介绍_Android_脚本之家
  5. 2022.2.13java学习笔记
  6. 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述
  7. python经典书籍:Python编程实战 运用设计模式、并发和程序库创建高质量程序
  8. mysql 格式化_在线SQL代码格式化
  9. java扫码枪键盘_JAVA读取USB扫描枪
  10. 计算机应用技术企业信息化,计算机应用技术对企业信息化作用
  11. ST-LINK V2.1 制作(含源码及其原理图)(type-c接口)可以配合robomaster 开发板下载口或者直接用杜邦线连接下载,支持串口调试
  12. 丽江旅游线路规划丽江游玩小贴士丽江游玩攻略花费
  13. 大厂Java研发岗位要求你清楚吗?
  14. wim工具扫描linux磁盘,WimTool Pro(WIM映像处理工具)
  15. Android 补间动画及动画组合AnimationSet常用方法整理
  16. 74HC165应用介绍
  17. ice的意思_ice是什么意思_ice怎么读_ice翻译_用法_发音_词组_同反义词_冰-新东方在线英语词典...
  18. iOS - 二维码生成、扫描及页面跳转
  19. 如何使营销变得年轻化
  20. AD20使用之 手动创建封装

热门文章

  1. 【两种解法】基础实验4-2.2 列出叶结点 (25 分)
  2. Pytest入门【2】
  3. python三级字典_python_三级字典
  4. linux编译避免污染源码分离,如何避免linux上的系统标准C/C++库?
  5. JAVA 串口编程 (三)
  6. matlab读int16读文件_MATLAB——文件读写(1)
  7. 计算机知识应用,计算机知识应用基础复习大纲
  8. linux 误删除mysql表能恢复吗,Linux中误删除数据文件和归档日志的恢复方法
  9. java mapper control_java spring boot中怎么编写mapper?怎么编写service和controller?
  10. python位置参数_Python;argparse;如何指定位置参数的位置