用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中的Cookie模块使用
Jul 06 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
Python3.4学习笔记之列表、数组操作示例
Mar 01 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
PyQt实现计数器的方法示例
Jan 18 Python
Python中使用Lambda函数的5种用法
Apr 01 Python
Python基础之hashlib模块详解
May 06 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 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下通过POST还是GET来传值
2008/06/05 PHP
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
网站上面有这种切换效果
2006/06/26 Javascript
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
Jquery 基础学习笔记
2009/05/29 Javascript
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
Python help()函数用法详解
2014/03/11 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
代码实例讲解python3的编码问题
2019/07/08 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js