用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 实现简单的电话本功能
Aug 09 Python
python中nan与inf转为特定数字方法示例
May 11 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 Python
python将秒数转化为时间格式的实例
Sep 16 Python
python网络应用开发知识点浅析
May 28 Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 Python
Python自定义一个异常类的方法
Jun 27 Python
解决python有时候import不了当前的包问题
Aug 28 Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
PyTorch中permute的使用方法
Apr 26 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中文本操作的类
2007/03/17 PHP
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
Angular实现响应式表单
2017/08/04 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
python中logging库的使用总结
2017/10/18 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
4s店机修工岗位职责
2013/12/20 职场文书
高三毕业寄语
2014/04/10 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
2015年教研组工作总结
2015/05/04 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫