分享好友 最新动态首页 最新动态分类 切换频道
词典分词算法详解:从基础到高效实现
2024-12-28 04:39

2. 词典分词

  • 2.1 什么是词
  • 2.2 词典
  • 2.3 切分算法
  • 2.4 字典树
  • 2.5 基于字典树的其它算法
  • 2.6 HanLP的词典分词实现
  • 中文分词:指的是将一段文本拆分为一系列单词的过程,这些单词顺序拼接后等于原文本。
  • 中文分词算法大致分为基于词典规则基于机器学习这两大派。

2.1 什么是词

  • 在基于词典的中文分词中,词的定义要现实得多词典中的字符串就是词

  • 词的性质–齐夫定律:一个单词的词频与它的词频排名成反比。

2.2 词典

互联网词库(SogouW, 15万个词条)、清华大学开放中文词库(THUOCL)、HanLP词库(千万级词条)
例如

 

HanLP中的词典格式是一种以空格分隔的表格形式,第一列是单词本身,之后每两列分别表示词性与相应的词频。

2.3 切分算法

首先,加载词典

 
  1. 完全切分

    指的是,找出一段文本中的所有单词。

     

    输出

     

    输出了所有可能的单词。由于词库中含有单字,所以结果中也出现了一些单字。

  2. 正向最长匹配

    上面的输出并不是中文分词,我们更需要那种有意义的词语序列,而不是所有出现在词典中的单词所构成的链表。比如,我们希望“北京大学”成为一整个词,而不是“北京 + 大学”之类的碎片。具体来说,就是在以某个下标为起点递增查词的过程中,优先输出更长的单词,这种规则被称为最长匹配算法。从前往后匹配则称为正向最长匹配,反之则称为逆向最长匹配

     

    输出

     

    第二句话就会产生误差了,我们是需要把“研究”提取出来,结果按照正向最长匹配算法就提取出了“研究生”,所以人们就想出了逆向最长匹配。

  3. 逆向最长匹配

     

    输出

     

    第一句正确了,但下一句又出错了,可谓拆东墙补西墙。另一些人提出综合两种规则,期待它们取长补短,称为双向最长匹配。

  4. 双向最长匹配

    这是一种融合两种匹配方法的复杂规则集,流程如下

    • 同时执行正向和逆向最长匹配,若两者的词数不同,则返回词数更少的那一个。
    • 否则,返回两者中单字更少的那一个。当单字数也相同时,优先返回逆向最长匹配的结果。
     

    输出

     

通过以上几种切分算法,我们可以做一个对比

上图显示,双向最长匹配的确在2、3、5这3种情况下选择出了最好的结果,但在4号句子上选择了错误的结果,使得最终正确率 3/6 反而小于逆向最长匹配的 4/6 , 由此,规则系统的脆弱可见一斑。规则集的维护有时是拆东墙补西墙,有时是帮倒忙。

2.4 字典树

匹配算法的瓶颈之一在于如何判断集合(词典)中是否含有字符串。如果用有序集合TreeMap)的话,复杂度是o(logn) ( n是词典大小);如果用散列表( Java的HashMap. Python的dict )的话,账面上的时间复杂度虽然下降了,但内存复杂度却上去了。有没有速度又快、内存又省的数据结构呢?这就是字典树

  1. 什么是字典树

    字符串集合常用宇典树(trie树、前缀树)存储,这是一种字符串上的树形数据结构。字典树中每条边都对应一个字, 从根节点往下的路径构成一个个字符串。字典树并不直接在节点上存储字符串, 而是将词语视作根节点到某节点之间的一条路径,并在终点节点(蓝色) 上做个标记“该节点对应词语的结尾”。字符串就是一 条路径,要查询一个单词,只需顺着这条路径从根节点往下走。如果能走到特殊标记的节点,则说明该字符串在集合中,否则说明不存在。一个典型的字典树如下图所示所示。

    其中,蓝色标记着该节点是一个词的结尾,数字是人为的编号。按照路径我们可以得到如下表所示

    词语路径入门0-1-2自然0-3-4自然人0-3-4-5自然语言0-3-4-6-7自语0-3-8

    当词典大小为 n 时,虽然最坏情况下字典树的复杂度依然是O(logn) (假设子节点用对数复杂度的数据结构存储,所有词语都是单字),但它的实际速度比二分查找快。这是因为随着路径的深入,前缀匹配是递进的过程,算法不必比较字符串的前缀。

  2. 字典树增删改

实现及其增删改查的操作见P47-49

2.5 基于字典树的其它算法

字典树的数据结构在以上的切分算法中已经很快了,但厉害的是作者通过自己的努力改进了基于字典树的算法,把分词速度推向了千万字每秒的级别,这里不一一详细介绍,详情见书,主要按照以下递进关系优化

  • 首字散列其余二分的字典树
  • 双数组字典树
  • AC自动机(多模式匹配)
  • 基于双数组字典树的AC自动机

2.6 HanLP的词典分词实现

  1. DoubleArrayTrieSegment

    DoubleArrayTrieSegment分词器是对DAT最长匹配的封装,默认加载hanlp.properties中CoreDictionaryPath制定的词典。

     

    输出

     
  2. 去掉停用词

    停用词词典文件(data/dictionnary/stopwords.txt

    该词典收录了常见的中英文无意义词汇(不含敏感词),每行一个词。

     

    输出

最新文章
农学院本科教学工作水平评估第一阶段任务完成情况
《农学院本科教学工作水平评估第一阶段任务完成情况》由会员分享,可在线阅读,更多相关《农学院本科教学工作水平评估第一阶段任务完成情况(15页珍藏版)》请在装配图网上搜索。1、农农学学院院本本科科教教学学工工作作水水平平评评估估
测评|AI全景三摄 三大智能算法 刷掌+刷脸 出入户动线录像……萤石DL60FVXPro人脸视频锁确实有料
好看的皮囊千篇一律,有趣的灵魂万里挑一。 对于用户而言,如何挑选一款既要有好看的外观设计,还要有趣的“灵魂”——好用、体验好,更集成诸多黑科技于一身的智能锁产品,实在不是一件易事,毕竟如今市面上的智能锁产品实在太多了。本着
建站资源与SEO协同策略:有效提升网站搜索引擎排名
  建站资源策划与SEO是网站优化的两大核心要素,它们相互关联、相互促进,对于提升网站排名具有至关重要的作用。那么,如何协同提升网站排名呢?  一、明确目标与定位AI图片创作,仅供参考  在建站资源策划阶段,首先要明确网站的目标
蜘蛛屯网站SEO秘籍,揭秘高效排名优化技巧,加速流量增长
深度解析蜘蛛屯网站排名优化策略,助您迅速提升网站流量!通过专业方法优化,从关键词研究、内容优化到技术调整,全方位提升网站在搜索引擎中的表现,实现流量激增。掌握这些策略,让您的网站在竞争中脱颖而出。随着互联网的飞速发展,越来
新概念“空间智能”火爆 对AI发展为何如此重要?
  最近,在硅谷火爆数月的AI新概念“空间智能”有了最新进展:World Labs推出一个AI系统,仅凭1张图,就能生成一个可交互的3D世界。用户能够像玩一样,自由地移动,探索这个3D世界。  让人惊叹的是,之前大多数生成模型预测的是像素,
南都专访 | 杨鑫:多引擎驱动下,欧派如何开启逆势增长加速度
2020年,宏观经济低迷的凄风,遭遇了房地产调控的苦雨,叠加疫情黑天鹅的冲击,整个家居消费市场被逼上了存量博弈的仄道。不过,对于正在大家居之路上一路狂奔的欧派家居而言,此刻的困境只是插曲,就像过往的精彩只是序章。欧派家居集团副
揭秘益关键词优化之道,打造高效营销策略
本文深入探讨益关键词建设策略,旨在为企业提供有效的营销方案。通过分析关键词优化技巧、行业趋势及实战案例,帮助企业目标受众,提升排名,增强竞争力。探究益市场特色关键词的挑选与优化技巧关键词优化实战策略益关键词建设案例分析在互
樱花校园模拟器苹果版下载
樱花校园模拟器苹果版下载游戏中,玩家可以自由探索校园的各个角落,发现隐藏的秘密和趣味元素。玩家可以与同学互动、参加各种社团活动,体验高中生活的多姿多彩。游戏中的角色形象设计可爱,场景细腻,为玩家营造了一个真实而充满活力的校
图床工具的选择及搭建个人图床(插件、GitHub+PicGo)
前言 对于用Markdown写博客的人来说,经常会遇到一个问题,那就是图片的处理,本地的图片怎么放到网上?这个时候就要用到图床工具了,就是把图片放到互联网上,然后获取外链。 尝试过用七牛云,
[原创] - C#编程大幅提高OUTLOOK的邮件搜索能力!
使用OUTLOOK, 你有没有遇到过上图的问题? 多达18419封邮件! 太多了, 每次想找一个邮件都非常耗时, 想办法解决这个问题成了一件非常紧迫的事情. 利用MS Search当然可以, 但是它太heavy了, 而且不支持如逻辑搜索表达式等复杂查找功能, 怎么办
相关文章
推荐文章
发表评论
0评