用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类继承用法实例分析
Oct 10 Python
python实现文件快照加密保护的方法
Jun 30 Python
Python for Informatics 第11章之正则表达式(四)
Apr 21 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
Python中正则表达式的用法总结
Feb 22 Python
PyQt5实现简易计算器
May 30 Python
pytorch 在sequential中使用view来reshape的例子
Aug 20 Python
python isinstance函数用法详解
Feb 13 Python
python用opencv 图像傅里叶变换
Jan 04 Python
Python3接口性能测试实例代码
Jun 20 Python
Python自动化工具之实现Excel转Markdown表格
Apr 08 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
Terran建筑一览
2020/03/14 星际争霸
PHP中上传大体积文件时需要的设置
2006/10/09 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
对比分析json及XML
2014/11/28 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
2015/08/24 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
关于python的list相关知识(推荐)
2017/08/30 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
python的等深分箱实例
2019/11/22 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
详解python中的异常和文件读写
2021/01/03 Python
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
给校长的建议书300字
2014/05/16 职场文书
体育口号大全
2014/06/18 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
鸦片战争观后感
2015/06/09 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS