用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中的floor()方法
May 15 Python
python Django框架实现自定义表单提交
Mar 25 Python
python cx_Oracle模块的安装和使用详细介绍
Feb 13 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
python 平衡二叉树实现代码示例
Jul 07 Python
python2.7实现邮件发送功能
Dec 12 Python
python实现彩色图转换成灰度图
Jan 15 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
pytorch数据预处理错误的解决
Feb 20 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 curl_init函数用法
2014/01/31 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
jquery实现弹出层完美居中效果
2014/03/03 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
2017/10/24 jQuery
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
python对html过滤处理的方法
2018/10/21 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
如何保障Web服务器安全
2014/05/05 面试题
入党积极分子评语
2014/05/04 职场文书
学校读书活动总结
2014/06/30 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
读书笔记格式
2015/07/02 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
vue+echarts实现多条折线图
2022/03/21 Vue.js