用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发送Email方法实例
Aug 21 Python
python编程线性回归代码示例
Dec 07 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
Flask之请求钩子的实现
Dec 23 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
python 实现图片修复(可用于去水印)
Nov 19 Python
python实现简单反弹球游戏
Apr 12 Python
python基础之while循环语句的使用
Apr 20 Python
python如何读取和存储dict()与.json格式文件
Jun 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下载远程文件类(支持断点续传)
2008/11/14 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
react 生命周期实例分析
2020/05/18 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
python3 map函数和filter函数详解
2019/08/26 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
J2EE系统只能是基于web
2015/09/08 面试题
初一地理教学反思
2014/01/16 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
年终总结会主持词
2014/03/25 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
场地使用证明模板
2014/10/25 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
创业计划书之面包店
2019/09/17 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python