用python实现前向分词最大匹配算法的示例代码


Posted in Python onAugust 06, 2020

理论介绍

分词是自然语言处理的一个基本工作,中文分词和英文不同,字词之间没有空格。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。中文分词技术属于自然语言处理技术范畴,对于一句话,人可以通过自己的知识来明白哪些是词,哪些不是词,但如何让计算机也能理解?其处理过程就是分词算法。

可以将中文分词方法简单归纳为:

1.基于词表的分词方法
2.基于统计的分词方法
3.基于序列标记的分词方法

其中,基于词表的分词方法最为简单,根据起始匹配位置不同可以分为:

1.前向最大匹配算法
2.后向最大匹配算法
3.双向最大匹配算法

三种方法思想都很简单,今天就用python实现前向最大匹配算法。

word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过自定义配置文件来改变组件行为,能自定义用户词库、自动检测词库变化、支持大规模分布式环境,能灵活指定多种分词算法,能使用refine功能灵活控制分词结果,还能使用词性标注、同义标注、反义标注、拼音标注等功能。同时还无缝和Lucene、Solr、ElasticSearch、Luke集成。

前向最大匹配算法

前向最大匹配算法,顾名思义,就是从待分词句子的左边向右边搜索,寻找词的最大匹配。我们需要规定一个词的最大长度,每次扫描的时候寻找当前开始的这个长度的词来和字典中的词匹配,如果没有找到,就缩短长度继续寻找,直到找到字典中的词或者成为单字。

具体代码实现

获取分词函数:getSeg(text)

def getSeg(text):
  # 句子为空
  if not text:
    return ''

  # 句子成为一个词
  if len(text) == 1:
    return text

  # 此处写了一个递归方法
  if text in word_dict:
    return text
  else:
    small = len(text) - 1
    text = text[0:small]
    return getSeg(text)

主函数:main()

def main():
  global test_str, word_dict
  test_str = test_str.strip()
  # 正向最大匹配分词测试 最大长度5
  max_len = max(len(word) for word in word_dict)
  result_str = [] # 保存分词结果
  result_len = 0
  print('input :', test_str)
  while test_str:
    tmp_str = test_str[0:max_len]
    seg_str = getSeg(tmp_str)
    seg_len = len(seg_str)
    result_len = result_len + seg_len

    if seg_str.strip():
      result_str.append(seg_str)
    test_str = test_str[seg_len:]

  print('output :', result_str)

字典:

word_dict = ['混沌', 'Logistic', '算法', '图片', '加密', '利用', '还原', 'Lena', '验证', 'Baboon', '效果']

测试句子:

test_str = '''一种基于混沌Logistic加密算法的图片加密与还原的方法,并利用Lena图和Baboon图来验证这种加密算法的加密效果。'''

分词结果

用python实现前向分词最大匹配算法的示例代码

到此这篇关于用python实现前向分词最大匹配算法的示例代码的文章就介绍到这了,更多相关python 前向分词最大匹配算法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的Django框架中模板碎片缓存简介
Jul 24 Python
Python 闭包的使用方法
Sep 07 Python
python3实现网络爬虫之BeautifulSoup使用详解
Dec 19 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
分析经典Python开发工程师面试题
Apr 08 Python
Python编程学习之如何判断3个数的大小
Aug 07 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
python+Selenium自动化测试——输入,点击操作
Mar 06 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 Python
pytorch--之halfTensor的使用详解
May 24 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 Python
Python爬虫防封ip的一些技巧
Aug 06 #Python
Python无损压缩图片的示例代码
Aug 06 #Python
通过实例简单了解python yield使用方法
Aug 06 #Python
Python切片列表字符串如何实现切换
Aug 06 #Python
Python爬虫爬取微信朋友圈
Aug 06 #Python
Python变量及数据类型用法原理汇总
Aug 06 #Python
基于logstash实现日志文件同步elasticsearch
Aug 06 #Python
You might like
使用PHP计算两个路径的相对路径
2013/06/14 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python的re模块正则表达式操作
2016/05/25 Python
python中requests小技巧
2017/05/10 Python
Python构建XML树结构的方法示例
2017/06/30 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
工作求职自荐信
2014/06/13 职场文书
党员争先创优承诺书
2015/01/20 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
班主任寄语2016
2015/12/04 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js