用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实现带百分比的进度条
Jun 28 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
Nov 17 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
python requests 库请求带有文件参数的接口实例
Jan 03 Python
Python 编程速成(推荐)
Apr 15 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
python Qt5实现窗体跟踪鼠标移动
Dec 13 Python
Window系统下Python如何安装OpenCV库
Mar 05 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
重写django的model下的objects模型管理器方式
May 15 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
Python APScheduler执行使用方法详解
Dec 10 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 输出缓存详解
2009/06/20 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
Python算法之栈(stack)的实现
2014/08/18 Python
Python 自动补全(vim)
2014/11/30 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
师范院校学生自荐信范文
2013/12/27 职场文书
四下基层实施方案
2014/03/28 职场文书
平安校园建设方案
2014/05/02 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
努力工作保证书
2015/02/28 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python