中文分词方法

本文参考自书籍《Python自然语言处理实战:核心技术与算法》
用做个人的学习笔记和分享

1. 规则分词

规则分词是一种机械分词方法,主要通过维护词典,在切分语句时将语句的每个字符串和词表中的词逐一匹配找到则切分,找不到则不切分。
具体包括正向最大匹配法、逆向最大匹配法和双向最大匹配法

1.1 正向最大匹配法

1.1.1 算法描述

①从左向右取待切分汉语句的m 个字符作为匹配字段, m 为机器词典中最长词条的
字符数。
②查找机器词典并进行匹配。
若匹配成功, 则将这个匹配字段作为一个词切分出来。
若匹配不成功,则将这个匹配宇段的最后一个字去掉,剩下的字符串作为新的匹配字段, 进行再次匹配。
③重复以上过程,直到切分出所有词为止。

1.1.2 算法实现

# 正向最大匹配
class MM(object):def __init__(self, dic_path):self.dictionary = set()self.maximum = 0with open(dic_path, 'r', encoding='utf8') as f:for line in f:line = line.strip()if not line:continueself.dictionary.add(line)if len(line) > self.maximum:self.maximum = len(line)def cut(self, text):result = []size = self.maximumtext_len = len(text)while text_len > 0:word = text[0:size]while word not in self.dictionary:if len(word) == 1:breakword = word[0:len(word) - 1]result.append(word)text = text[len(word):]text_len = len(text)return resultif __name__ == '__main__':text = "南京市长江大桥"tokenizer = MM('dic.utf8')print(tokenizer.cut(text))

注:dic.utf8文件是自定义的词典文件
这个词典包括一下词汇:
南京市
南京市长
长江大桥
人名解放军
大桥

1.2 逆向最大匹配法

1.2.1 算法描述

①从被处理文挡的末端开始匹配扫描
②每次取最末端i个字符( i 为词典中最长词数)作为匹配字段
若匹配失败,则去掉匹配字段最前面的一个字,继续匹配。
若匹配成功则保存字段,它使用的分词词典是逆序词典, 其中的每个词条都将按逆序方式存放。
③在实际处理时,可以先将文档进行倒排处理成逆序文档。然后根据逆序词典,对逆序文档用正向最大匹配法处理即可。

由于汉语中偏正结构较多,若从后向前匹配,可以适当提高精确度。所以,逆向最大匹配法比正向最大匹配法的误差要小。
统计结果表明,单纯使用正向最大匹配的错误率为1/169 ,单纯使用逆向最大匹配的错误率为1/245

1.2.2 算法实现

# 逆向最大匹配
class IMM(object):def __init__(self, dic_path):self.dictionary = set()self.maximum = 0with open(dic_path, 'r', encoding='utf8') as f:for line in f:line = line.strip()if not line:continueself.dictionary.add(line)if len(line) > self.maximum:self.maximum = len(line)def cut(self, text):result = []index = len(text)while index > 0:word = Nonefor size in range(self.maximum, 0, -1):if index - size < 0:continuepiece = text[(index - size):index]if piece in self.dictionary:word = pieceresult.append(word)index -= sizebreakif word is None:index -= 1return result[::-1]if __name__ == '__main__':text = "南京市长江大桥"tokenizer = IMM('dic.utf8')print(tokenizer.cut(text))

1.3 双向最大匹配法

1.3.1 算法描述

将正向最大匹配法得到的分词结果和逆向最大匹配法得到的结果进行比较
按照最大匹配原则,选取词数切分最少的作为结果。

双向匹配法被广泛应用
据SunM.S. 和Bejamin K.T. ( 1995 )的研究表明,中文中90.0% 左右的句子,正向最大匹配法和逆向最大匹配法完全重合且正确,只有大概9.0% 的句子两种切分方法得到的结果不一样,但其中必有一个是正确的(歧义检测成功),只有不到1.0%的句子,使用正向最大匹配法和逆向最大匹配法的切分虽重合却是错的,或者正向最大匹配法和逆向最大匹配法切分不同但两个都不对(歧义检测失败) 。

2. 统计分词

统计分词的详细笔记

【Python自然语言处理】中文分词技术——规则分词相关推荐

  1. 【Python自然语言处理】中文分词技术——统计分词

    中文分词方法 本文参考自书籍<Python自然语言处理实战:核心技术与算法> 用做个人的学习笔记和分享 1. 规则分词 规则分词的详细笔记 2. 统计分词 2.1 一般步骤 建立统计语言模 ...

  2. python中文版免费下载-PYTHON自然语言处理(中文最新完整版)pdf下载

    内容简介 自然语言处理(natural language processing,nlp)是计算机科学领域与人工智能领域中的一个重要方向.它研究能够实现人与计算机之间用自然语言进行有效通信的各种理论和方 ...

  3. jieba分词三种分词模式、用户自定义词典、停用词词典的使用

    目录 三种分词模式 自定义词典使用 停用词词典的使用 补充知识 1.中文语料库: 2.中文分词技术 2.1 规则分词 2.2 统计分词 三种分词模式 精确模式:试图将句子最精确地切分开,适合文本分析. ...

  4. 与自定义词典 分词_如何掌握分词技术,你需要学会这些

    导语 本周对自然语言处理的分词技术进行了学习.本文针对分词技术的进行了全视角的概览,目标是掌握什么是分词技术.为什么需要分词技术和如何使用分词技术.后续将分不同篇幅对其中内容进行深挖和讲解. 文章结构 ...

  5. jieba分词错误_如何掌握分词技术,你需要学会这些

    1.导语: 本周对自然语言处理的分词技术进行了学习.本文针对分词技术的进行了全视角的概览,目标是掌握什么是分词技术.为什么需要分词技术和如何使用分词技术.后续将分不同篇幅对其中内容进行深挖和讲解.文章 ...

  6. 自然语言0_nltk中文使用和学习资料汇总

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...

  7. 《自然语言处理实战入门》 ---- 第4课 :中文分词原理及相关组件简介 之 语言学与分词技术简介...

    <自然语言处理实战入门> ---- 第4课 :中文分词原理及相关组件简介 之 语言学与分词技术简介 https://edu.csdn.net/course/play/20769/25954 ...

  8. 《自然语言处理实战入门》 第三章 :中文分词原理及相关组件简介 ---- 语言学与分词技术简介

    文章大纲 0.内容梗概 1. 汉语语言学简介 1.1 汉语与汉字的起源 1.2 汉字的统一与演变 1.3 印欧语系与汉藏语系 1.4 语言区别对于NLP 的影响 2. 词汇与分词技术简介 2.1 汉语 ...

  9. NLP学习(二)中文分词技术

    运行平台: Windows Python版本: Python3.x IDE: PyCharm 一. 前言 这篇内容主要是讲解的中文分词,词是一个完整语义的最小单位.分词技术是词性标注.命名实体识别.关 ...

最新文章

  1. easyexcel生成excel_阿里JAVA解析Excel工具easyexcel
  2. 【2016.12.04】JavaScript笔记
  3. 殷拓联手红星美凯龙收购软装家具企业“墙尚”40%股份​
  4. Hive的四种存储方式Stored as ?
  5. 使用Spring特性优雅书写业务代码
  6. asp.net 之高速缓存
  7. Redis(四):String字符串数据类型详解
  8. 查找算法:插值查找算法实现及分析
  9. linux---多线程---信号量--不懂
  10. 在jsp页面通过JDBC访问数据库,并取出数据显示到页面上_试验mysql、sqlserver2008(亲测成功)...
  11. 顺无盘linux win10包,(2017.01.14)网维大师9.0.3.0无盘-xp-win7x32-x64-Win10x64公包
  12. 苹果4s刷linux,苹果4s降级教程【图解】
  13. 佳博打印机ip地址修改软件_【动手实践】树莓派将有线打印机转为无线共享打印机 by xinlong...
  14. veu 中 nprogress 的 使用方法
  15. robotframework 图片校验
  16. Java 常见摘要算法——md5、sha1、sha256
  17. 在家里如何赚钱?5个在家赚钱的方法,让你日进斗金!
  18. POJ3349-Snowflake Snow Snowflakes
  19. 三、IDEA更换主题皮肤
  20. NC57,NC63-NC二开经验总结

热门文章

  1. sql 整改措施 注入_SQL注入的漏洞及解决方案
  2. OpenCV_01 简介+无版权安装+模块分析
  3. logistic模型原理与推导过程分析(3)
  4. 基于Element-plus封装配置化表单组件(组件的v-model实现)
  5. JS面向对象——Object对象的方法补充、原型继承关系图
  6. 论文阅读 - Video Swin Transformer
  7. 主成分分析(PCA)和基于核函数的主成分分析(KPCA)入门
  8. LeetCode 1980. 找出不同的二进制字符串
  9. 数据结构--树--线段树(Segment Tree)
  10. LeetCode 1042. 不邻接植花(图的数据结构)