正向(前向)最大匹配与逆向(后向)最大匹配。

中文分词目前可以分为“规则分词”,“统计分词”,“混合分词(规则+统计)”这三个主要流派。这次介绍下基于规则的分词,其是一种机械的分词方法,主要通过维护词典,在切分语句时,将语句的每个字符串与词表中的词逐一进行匹配,找到则切分,否则不予切分。

正向最大匹配算法:这里需要知道两点,一个是分词词典(也即是已经分词过的词典),另一个是需要被分词的文档。假定分词词典中的最长词有ii个汉子字符串,则用被处理文档的当前字符串中的前ii个字作为匹配字段,查找字典。若此时分词词典中存在这样一个字符串,则匹配成功,而此时被匹配的字段切分出来。如果匹配失败,将匹配字段中的最后一个字去掉,对此时剩下的字串重新与分词词典进行匹配,如此下去直到匹配成功。也即是切分出一个词或剩余字串的长度为零为止,这个时候才是匹配了一轮,接着进行下一个ii字字串的匹配,方法同上,直到文档被扫描完为止。

示例说明

示例1:

对字符串:“研究生命的起源”进行分词。
假定我们的字典中的相关内容如下:
研究
研究生
生命


起源

假定最大匹配字数设定为5。

正向最大匹配过程

研究生命的
研究生命
研究生 #第一个词匹配成功
命的起源
命的起
命的
命 #第二个词匹配成功,一个单字
的起源
的起
的 #第三个词匹配成功
起源 #第四个词匹配成功
那么正向最大匹配的结果就是
研究生 命 的 起源

逆向最大匹配的过程

生命的起源
命的起源
的起源
起源 #第一个词匹配成功
研究生命的
究生命的
生命的
命的
的 #第二个词匹配成功
研究生命
究生命
生命 #第三个词匹配成功
研究 #第四个词匹配成功
所以逆向最大匹配后的结果为
研究 生命 的 起源
两种分词过程总结
【正向匹配:从左到右,逐步去掉右部(底部)的字进行新一轮匹配,逆向匹配:从右到左,逐步去掉左部(底部)的字进行新一轮匹配】
因为中文比较复杂以及中文的特殊性,逆向最大匹配大多时候往往会比正向要准确。

示例2:

对“我们在野生动物园玩”进行分词。

1、正向最大匹配法:

正向即从前往后取词,从7->1,每次减一个字,直到词典命中或剩下1个单字。

第1次:“我们在野生动物”,扫描7字词典,无

第2次:“我们在野生动”,扫描6字词典,无

。。。。

第6次:“我们”,扫描2字词典,有

扫描中止,输出第1个词为“我们”,去除第1个词后开始第2轮扫描,即:

第2轮扫描:

第1次:“在野生动物园玩”,扫描7字词典,无

第2次:“在野生动物园”,扫描6字词典,无

。。。。

第6次:“在野”,扫描2字词典,有

扫描中止,输出第2个词为“在野”,去除第2个词后开始第3轮扫描,即:

第3轮扫描:

第1次:“生动物园玩”,扫描5字词典,无

第2次:“生动物园”,扫描4字词典,无

第3次:“生动物”,扫描3字词典,无

第4次:“生动”,扫描2字词典,有

扫描中止,输出第3个词为“生动”,第4轮扫描,即:

第4轮扫描:

第1次:“物园玩”,扫描3字词典,无

第2次:“物园”,扫描2字词典,无

第3次:“物”,扫描1字词典,无

扫描中止,输出第4个词为“物”,非字典词数加1,开始第5轮扫描,即:

第5轮扫描:

第1次:“园玩”,扫描2字词典,无

第2次:“园”,扫描1字词典,有

扫描中止,输出第5个词为“园”,单字字典词数加1,开始第6轮扫描,即:

第6轮扫描:

第1次:“玩”,扫描1字字典词,有

扫描中止,输出第6个词为“玩”,单字字典词数加1,整体扫描结束。

正向最大匹配法,最终切分结果为:“我们/在野/生动/物/园/玩”,其中,单字字典词为2,非词典词为1。

2、逆向最大匹配法:

逆向即从后往前取词,其他逻辑和正向相同。即:

第1轮扫描:“在野生动物园玩”

第1次:“在野生动物园玩”,扫描7字词典,无

第2次:“野生动物园玩”,扫描6字词典,无

。。。。

第7次:“玩”,扫描1字词典,有

扫描中止,输出“玩”,单字字典词加1,开始第2轮扫描

第2轮扫描:“们在野生动物园”

第1次:“们在野生动物园”,扫描7字词典,无

第2次:“在野生动物园”,扫描6字词典,无

第3次:“野生动物园”,扫描5字词典,有

扫描中止,输出“野生动物园”,开始第3轮扫描

第3轮扫描:“我们在”

第1次:“我们在”,扫描3字词典,无

第2次:“们在”,扫描2字词典,无

第3次:“在”,扫描1字词典,有

扫描中止,输出“在”,单字字典词加1,开始第4轮扫描

第4轮扫描:“我们”

第1次:“我们”,扫描2字词典,有

扫描中止,输出“我们”,整体扫描结束。

逆向最大匹配法,最终切分结果为:“我们/在/野生动物园/玩”,其中,单字字典词为2,非词典词为0。

3、双向最大匹配法:

正向最大匹配法和逆向最大匹配法,都有其局限性,我举得例子是正向最大匹配法局限性的例子,逆向也同样存在(如:长春药店,逆向切分为“长/春药店”),因此有人又提出了双向最大匹配法,双向最大匹配法。即,两种算法都切一遍,然后根据大颗粒度词越多越好,非词典词和单字词越少越好的原则,选取其中一种分词结果输出。

如:“我们在野生动物园玩”

正向最大匹配法,最终切分结果为:“我们/在野/生动/物/园/玩”,其中,两字词3个,单字字典词为2,非词典词为1。

逆向最大匹配法,最终切分结果为:“我们/在/野生动物园/玩”,其中,五字词1个,两字词1个,单字字典词为2,非词典词为0。

非字典词:正向(1)>逆向(0)(越少越好)

单字字典词:正向(2)=逆向(2)(越少越好)

总词数:正向(6)>逆向(4)(越少越好)

因此最终输出为逆向结果。

代码

[中文分词之正向最大匹配算法]

from: https://youzipi.blog.csdn.net/article/details/105525351

ref:

中文分词:正向最大匹配与逆向最大匹配相关推荐

  1. java中文分词算法_Java实现逆向最大匹配中文分词算法

    写道 //Java实现逆向最大匹配中文分词算法 public class SplitChineseCharacter { public static void main(String[] args) ...

  2. 自己写中文分词器之(一)_逆向最大匹配算法的实现

    一直都想着自己动手写一写中文分词,但是一直都没有动手.今天终于开始了.从最简单的开始,步步深入.希望自己最后能把分词.词性标注.命名实体识别这几块都完成. 好了,话不多述,进入正题. 分词最简单的思路 ...

  3. Python实现中文分词--正向最大匹配和逆向最大匹配

    编译原理实验二:Python实现中文分词–正向最大匹配和逆向最大匹配 最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数 ...

  4. 正向最大匹配 和逆向最大匹配对比比较

    正向最大匹配法 &逆向最大匹配法 原理对比 下面介绍的分词算法中最简单的正向最大匹配和反向最大匹配. 这种两种方法都是机械分词方法,它是按照一定的策略将待分析的汉字串与一个"充分大的 ...

  5. 中文分词——正向最大匹配法

    中文分词应用非常广泛,网上也有非常多开源项目. 我在这里主要讲一下中文分词里面算法的简单实现,废话不多说了,如今先上代码 package com;import java.util.ArrayList; ...

  6. 词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法

    词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法 Type真是太帅了 于 2018-12-31 13:20:07 发布 1930  收藏 1 分类专栏: 编程 版权 编程 专栏收录该内容 15 ...

  7. 逆向最大匹配分词算法

    逆向最大匹配分词算法 By Jorbe 2014/03/13 计算机科学 No Comments 中文分词是所有中文信息处理的基础.在数据挖掘.搜索引擎.自然语言处理等领域都起着至关重要的作用.中文分 ...

  8. 基于N-gram的双向最大匹配中文分词

    • 摘要 这次实验的内容是中文分词.将一个句子的所有词用空格隔开,将一个字串转换为一个词序列. 而我们用到的分词算法是基于字符串的分词方法中的正向最大匹配算法和逆向最大匹配算法.然后对两个方向匹配得出 ...

  9. NLP-基础任务-中文分词算法(1)-基于词典: 机械分词(词典字符串匹配):前向最大匹配、后向最大匹配、双向最大匹配【OOV:基于现有词典,不能进行新词发现处理】

    分词与NLP关系:分词是中文自然语言处理的基础,没有中文分词,我们对语言很难量化,进而很能运用数学的知识去解决问题.对于拉丁语系是不需要分词的. 拉丁语系与亚系语言区别 拉丁语言系不需要分词,因为他们 ...

  10. 深度学习将会变革NLP中的中文分词

    深度学习将会变革NLP中的中文分词 2016-08-08 19:03 转载 陈圳 0条评论 雷锋网按:本文转自ResysChina高翔,文章主要介绍了1)区分中文分词的方法:2)用深度学习的方法来解决 ...

最新文章

  1. 十大排序算法 导图总结
  2. 庆祝自己过了ACP!!
  3. C#通过继电器接收PD132地感设备信号
  4. MySQL 遇到的问题
  5. 20211231 使用windows 10代理时,快捷设置“手动设置代理”的“不使用代理”条目
  6. linux 中查找文件,并且将目标文件按时间顺序排序
  7. Python----倚楼听风雨
  8. 腾讯互娱开源分布式开发框架 Pebble
  9. app测试过程和重点关注内容
  10. 通过还款计划表监控还款异常
  11. 超级好用很少人知道的5款小众软件,建议收藏转发
  12. 支持VS2017的vax插件VA_X_Setup2210
  13. 长江大学计算机科学学院德贵奖学金,关于做好2019年各类奖学金评选的通知
  14. 资金合规结算——聚焦银行内部两种不同账户
  15. 【四二学堂】H5手机游戏-梅花易数一撮金(游戏开发系列微课之一)
  16. [教程]安装青鸟云Web服务器
  17. 无限复活服务器,绝地求生刺激战场无限复活模式怎么玩 无限复活玩法攻略分享...
  18. 深入浅出matplotlib(101):研究最有名的滤波函数:sinc函数
  19. c语言如何输入数字,请问如何在C语言中输入数字获得拼音?
  20. 组建一个计算机网络系统有,组建一个计算机网络一般需要哪些部件

热门文章

  1. typeof应该注意的地方(网龙公司校招笔试题)
  2. [轉]winrar的命令行
  3. 笔记本电脑触摸板的正确使用方法 --转摘
  4. Codeforces 1009G Allowed Letters 最大流转最小割 sosdp
  5. 工业机器人常用语言---val语言介绍
  6. 前端简单h5播放器的制作
  7. 【Oracle】Oracle基本数据类型总结
  8. iOS archive(归档)的总结 (序列化和反序列化,持久化到文件)
  9. 转-流框架中DOMContentLoaded事件的实现
  10. DiscuzNT改造-远程图片自动采集-DNT2.5(自动采集、源码下载)