转载自:http://blog.sina.com.cn/s/blog_53daccf401011t74.html
今天一个朋友找到我,她的一个亲戚写毕业论文涉及中文分词部分该如何设计算法,我把我的理解稍稍整理了一下,写出来供大家探讨:
分词算法设计中的几个基本原则:
1、颗粒度越大越好:用于进行语义分析的文本分词,要求分词结果的颗粒度越大,即单词的字数越多,所能表示的含义越确切,如:“公安局长”可以分为“公安 局长”、“公安局 长”、“公安局长”都算对,但是要用于语义分析,则“公安局长”的分词结果最好(当然前提是所使用的词典中有这个词)
2、切分结果中非词典词越少越好,单字字典词数越少越好,这里的“非词典词”就是不包含在词典中的单字,而“单字字典词”指的是可以独立运用的单字,如“的”、“了”、“和”、“你”、“我”、“他”。例如:“技术和服务”,可以分为“技术 和服 务”以及“技术 和 服务”,但“务”字无法独立成词(即词典中没有),但“和”字可以单独成词(词典中要包含),因此“技术 和服 务”有1个非词典词,而“技术 和 服务”有0个非词典词,因此选用后者。
3、总体词数越少越好,在相同字数的情况下,总词数越少,说明语义单元越少,那么相对的单个语义单元的权重会越大,因此准确性会越高。

下面详细说说正向最大匹配法、逆向最大匹配法和双向最大匹配法具体是如何进行的:
先说说什么是最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。例如:词典中最长词为“中华人民共和国”共7个汉字,则最大匹配起始字数为7个汉字。然后逐字递减,在对应的词典中进行查找。
下面以“我们在野生动物园玩”详细说明一下这几种匹配方法:
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)(越少越好)
因此最终输出为逆向结果。

中文分词 正向最大匹配法 逆向最大匹配法 双向最大匹配法相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较...

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  8. 自然语言处理-中文分词相关算法(MM、RMM、BMM、HMM)

    文章目录 一.前言 二.分词算法 2.1 规则分词 2.1.1 正向最大匹配法 2.1.2 逆向最大匹配法 2.1.3 双向最大匹配法 2.2 统计分词 2.2.1 语言模型 2.2.2 HMM模型 ...

  9. 中文分词算法—— 基于词典的方法

    1.基于词典的方法(字符串匹配,机械分词方法) 定义:按照一定策略将待分析的汉字串与一个"大机器词典"中的词条进行匹配,若在词典中找到某个字符串,则匹配成功. 按照扫描方向的不同: ...

  10. python词库介绍_中文分词原理及常用Python中文分词库介绍

    转自 进击的Coder 公众号 原理 中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词.表面上看,分词其实就是那么回事,但分词效果好不好对 ...

最新文章

  1. mysql tree 修改_13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令
  2. php点击字切换验证码,PHP生成图片验证码、点击切换实例 Web程序 - 贪吃蛇学院-专业IT技术平台...
  3. Windows 技术篇 - 远程桌面连接不保存密码、每次都要输入密码问题解决
  4. 懒加载--初步理解. by:王朋
  5. win7‘上帝模式’
  6. SpringSecruity整合Oauth2 详解(一)
  7. mysql导出单表数据
  8. leftjoin多个on条件_MYSQL|为什么LEFT JOIN会这么慢?
  9. 一站式 Java Web 框架 firefly-2.0_07发布
  10. python小老鼠编程_邯郸pythonnot学习费用多少
  11. 算法 - 普里姆算法(修路问题求解)
  12. 【Spark】开发Spark选择Java还是Scala?
  13. (5)容器级标签和文本级标签
  14. python插排_PythonTkinter接收插座不接收
  15. innerHTML和outerHTML有什么区别
  16. 利用numpy自带的polyfit和polyval函数进行回归分析
  17. apache实验报告 linux_Apache服务器配置实验报告
  18. “读芯术”精华文章汇总:学术报告
  19. 星巴克招人!要技术大拿。
  20. Rosalind第68题:Counting Optimal Alignments

热门文章

  1. IP 地址分为哪几类?
  2. 以太网交换机如何工作以及MAC和PHY
  3. sai 绘图软件快捷键
  4. python中label组件参数_【Python64-tkinter_label组件】
  5. dna计算机 论文,科学网—阿德勒曼DNA计算机(科普) - 沈海军的博文
  6. 让Myeclipse10支持Mac OSX – Retina显示屏
  7. 天玑处理器排行榜2022 联发科天玑处理器性能排行榜2022
  8. 生理学知识点总结--biologic
  9. java课程设计体会_javaweb课程设计心得体会.doc
  10. 一致性检验评价方法kappa