首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

自然语言处理系列七》中文分词》规则分词

  • 25-03-04 04:41
  • 3602
  • 12510
blog.csdn.net

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】

文章目录

  • 自然语言处理系列七
    • 中文分词
      • 规则分词
  • 总结

自然语言处理系列七

中文分词

中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文的词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比英文要复杂得多、困难得多。

规则分词

规则分词是基于字典、词库匹配的分词方法(机械分词法),其实现的主要思想是:切分语句时,将语句特定长的字符串与字典进行匹配,匹配成功就进行切分。按照匹配的方式可分为:正向最大匹配分词、逆向最大匹配分词和双向最大匹配分词。这种方法按照一定策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。识别出一个词,根据扫描方向的不同分为正向匹配和逆向匹配。根据不同长度优先匹配的情况,分为最大(最长)匹配和最小(最短)匹配。根据与词性标注过程是否相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。

我们来举个例子:
假设现在有段中文文本"网易杭研大厦",并且词典中包含[“网易”, “杭研”, “大厦”, “网易杭研”, “杭研大厦”, “网易杭研大厦”]。基于这个简单的小词典不需要任何的理论知识可以非常容易的分成下面这四种结果:
网易 / 杭研 / 大厦
网易 / 杭研大厦
网易杭研 / 大厦
网易杭研大厦
上面这四种分词结果都是正确的,不过在中文中越长的单词所表达的意义越丰富并且含义越明确,所以我们会更倾向于选择"网易杭研大厦"。比如我们更倾向将"北京大学"作为一个完整的单词,而不是划分成"北京"和"大学"两个碎片化的单词,"北京大学"比"北京"和"大学"所表达的意义更加丰富,同时"北京大学"所表达的含义也更加明确。

在中文中越长的单词所表达的意义越丰富并且含义越明确,因此就有了第一条规则:在以某个下标递归查词的过程中,优先输出更长的单词,这种规则也被称为最长匹配算法。根据下标扫描顺序的不同分为:
正向最长匹配,下标的扫描顺序从前往后;
逆向最长匹配,下标的扫描顺序从后往前;
下面对正向最大匹配分词、逆向最大匹配分词和双向最大匹配分词的原理一一详细讲解。在讲之前会用到HanLP中文分词这个开源工具包,先简单介绍下。
HanLP是面向生产环境的多语种自然语言处理工具包,目标是普及落地最前沿的NLP技术。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。持中文分词(N-最短路分词、CRF分词、索引分词、用户自定义词典、词性标注),命名实体识别(中国人名、音译人名、日本人名、地名、实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本推荐,依存句法分析(MaxEnt依存句法分析、CRF依存句法分析)。提供Lucene插件,兼容Lucene4.x。在提供丰富功能的同时,HanLP内部模块坚持低耦合、模型坚持惰性加载、服务坚持静态提供、词典坚持明文发布,使用非常方便,同时自带一些语料处理工具,帮助用户训练自己的语料。HanLP同时支持Java和Python调用,GitHub开源地址为:https://github.com/hankcs/HanLP
安装好HanLP环境后我们先来看看如何使用Python加载HanLP的词典。首先需要查看HanLP自带词典的具体路径,可以通过下面命令进行查看(需要进入安装HanLP的虚拟环境中):
hanlp –v
查看HanLP配置的默认目录查看HanLP配置的默认目录

其中data路径中包含HanLP自带的一些数据文件,进入存放词典的"dictionary"文件中:
HanLP自带的词典HanLP自带的词典

"CoreNatureDictionary.mini.txt"就是我们接下来要使用的迷你核心词典,使用head -n 5 CoreNatureDictionary.mini.txt查看迷你核心词典的前5行。
核心迷你词典的前5行核心迷你词典的前5行

HanLP中的词典格式是一种以空格分隔的表格形式,第一列为单词本身,之后的两列分别表示词性和单词表示当前词性时的词频,单词可能不止一种词性,因此后面的列依次类推表示词性和单词表示当前词性时的词频。比如"x w 7 nx 1"表示"x"这个词以标点符号(w)的身份出现了7次,以字母专名(nx)的身份出现了1次,当然这里的词频是在某个语料库上进行统计的。不过在基于词典分词的过程中,词性和词频没有太大的用处,可以暂时忽略。
使用Python加载HanLP自带的迷你核心词典"CoreNatureDictionary.mini.txt"词典代码如下:

from pyhanlp import *

def load_dictionary():
    """
    加载HanLP中的mini词库
    :return: 一个set形式的词库
    """
    # 利用JClass获取HanLP中的IOUtil工具类
    IOUtil = JClass('com.hankcs.hanlp.corpus.io.IOUtil')
    # 取得HanLP的配置项Config中的词典路径,并替换成CoreNatureDictionary.mini.txt词典
    path = HanLP.Config.CoreDictionaryPath.replace('.txt', '.mini.txt')
    # 读入加载列表中指定多个词典文件,返回的是Java Map对象
    dic = IOUtil.loadDictionary([path])
    print(type(dic))
    # 不关心词性和词频引出只获取Map对象的键值KeySet,并将其转换成Python的set集合
    return set(dic.keySet())

if __name__ == '__main__':
    dic = load_dictionary()
    print(len(dic))
    print(list(dic)[0])

代码运行后的结果:
<class 'jpype._jclass.java.util.TreeMap'>
85584
度假村
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

注意:
JClass函数是连通Java和Python的桥梁,可以根据Java路径名获得Python类;
HanLP默认配置的词典是"CoreNatureDictionary.txt",如果想要使用迷你的"CoreNatureDictionary.mini.txt"只需要将配置文件中的".txt"替换成"mini.txt";
加载好了词典,在具体介绍正向最长匹配、逆向最长匹配以及双向最长匹配之前,先来看看什么是最长匹配?
最长匹配算法是基于词典进行匹配,首先选取词典中最长单词的汉字个数作为最长匹配的起始长度。比如现在词典中的最长单词中包含5个汉字,那么最长匹配的起始汉字个数就为5,如果与词典匹配不成功就减少一个汉字继续与词典进行匹配,循环往复,直至与词典匹配且满足规则或者剩下一个汉字。

接下来的自然语言处理系列详细讲解正向最大匹配分词、逆向最大匹配分词和双向最大匹配分词的原理,并用HanLP举例子给大家代码演示。

总结

此文章有对应的配套视频,其它更多精彩文章请大家下载充电了么app,可获取千万免费好课和文章,配套新书教材请看陈敬雷新书:《分布式机器学习实战》(人工智能科学与技术丛书)

【新书介绍】
《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目

【新书介绍视频】
分布式机器学习实战(人工智能科学与技术丛书)新书【陈敬雷】
视频特色:重点对新书进行介绍,最新前沿技术热点剖析,技术职业规划建议!听完此课你对人工智能领域将有一个崭新的技术视野!职业发展也将有更加清晰的认识!

【精品课程】
《分布式机器学习实战》大数据人工智能AI专家级精品课程

【免费体验视频】:
人工智能百万年薪成长路线/从Python到最新热点技术

从Python编程零基础小白入门到人工智能高级实战系列课

视频特色: 本系列专家级精品课有对应的配套书籍《分布式机器学习实战》,精品课和书籍可以互补式学习,彼此相互补充,大大提高了学习效率。本系列课和书籍是以分布式机器学习为主线,并对其依赖的大数据技术做了详细介绍,之后对目前主流的分布式机器学习框架和算法进行重点讲解,本系列课和书籍侧重实战,最后讲几个工业级的系统实战项目给大家。 课程核心内容有互联网公司大数据和人工智能那些事、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)、就业/面试技巧/职业生涯规划/职业晋升指导等内容。

【充电了么公司介绍】

充电了么App是专注上班族职业培训充电学习的在线教育平台。

专注工作职业技能提升和学习,提高工作效率,带来经济效益!今天你充电了么?

充电了么官网
http://www.chongdianleme.com/

充电了么App官网下载地址
https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app

功能特色如下:

【全行业职位】 - 专注职场上班族职业技能提升

覆盖所有行业和职位,不管你是上班族,高管,还是创业都有你要学习的视频和文章。其中大数据智能AI、区块链、深度学习是互联网一线工业级的实战经验。

除了专业技能学习,还有通用职场技能,比如企业管理、股权激励和设计、职业生涯规划、社交礼仪、沟通技巧、演讲技巧、开会技巧、发邮件技巧、工作压力如何放松、人脉关系等等,全方位提高你的专业水平和整体素质。

【牛人课堂】 - 学习牛人的工作经验

1.智能个性化引擎:

海量视频课程,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习课程。

2.听课全网搜索

输入关键词搜索海量视频课程,应有尽有,总有适合你的课程。

3.听课播放详情

视频播放详情,除了播放当前视频,更有相关视频课程和文章阅读,对某个技能知识点强化,让你轻松成为某个领域的资深专家。

【精品阅读】 - 技能文章兴趣阅读

1.个性化阅读引擎:

千万级文章阅读,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习文章。

2.阅读全网搜索

输入关键词搜索海量文章阅读,应有尽有,总有你感兴趣的技能学习文章。

【机器人老师】 - 个人提升趣味学习

基于搜索引擎和智能深度学习训练,为您打造更懂你的机器人老师,用自然语言和机器人老师聊天学习,寓教于乐,高效学习,快乐人生。

【精短课程】 - 高效学习知识

海量精短牛人课程,满足你的时间碎片化学习,快速提高某个技能知识点。

上一篇:自然语言处理系列六》中文分词》中文分词原理
下一篇:自然语言处理系列八》中文分词》规则分词》正向最大匹配法

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览63151 人正在系统学习中
注:本文转载自blog.csdn.net的陈敬雷-充电了么-CEO兼CTO的文章"https://blog.csdn.net/weixin_52610848/article/details/113531316"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top