用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 相关文章推荐
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
Python3生成手写体数字方法
Jan 30 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
Python 面向对象部分知识点小结
Mar 09 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 Python
Python解析微信dat文件的方法
Nov 30 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用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
使用JSLint提高JS代码质量方法分享
2013/12/16 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
商业房地产广告语
2014/03/13 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
2014年团支部工作总结
2014/11/17 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
MyBatis 动态SQL全面详解
2021/10/05 MySQL