用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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
python基础教程项目四之新闻聚合
Apr 02 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
python提取包含关键字的整行数据方法
Dec 11 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
Pytest mark使用实例及原理解析
Feb 22 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 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+MySQL 制作简单的留言本
2009/11/02 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
2010/06/28 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
pandas 层次化索引的实现方法
2019/07/06 Python
python提取log文件内容并画出图表
2019/07/08 Python
python无序链表删除重复项的方法
2020/01/17 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
刑事法律意见书
2015/06/04 职场文书
《包身工》教学反思
2016/02/23 职场文书
导游词之五台山
2019/10/11 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS