用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 23 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
一篇文章快速了解Python的GIL
Jan 12 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
Python基于TCP实现会聊天的小机器人功能示例
Apr 09 Python
详解Django rest_framework实现RESTful API
May 24 Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 Python
python 通过视频url获取视频的宽高方式
Dec 10 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
Feb 19 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 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 星际争霸
德生S2000电路分析
2021/03/02 无线电
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
用console.table()调试javascript
2014/09/04 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
用 python 进行微信好友信息分析
2020/11/28 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
高等教育学自荐书范文
2014/02/10 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
平面设计求职信
2014/03/10 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
心得体会的写法
2014/09/05 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
python中的None与NULL用法说明
2021/05/25 Python
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
mysql主从复制的实现步骤
2021/10/24 MySQL