位置: 编程技术 - 正文

python中文分词教程之前向最大正向匹配算法详解(python中文分词库)

编辑:rootadmin

推荐整理分享python中文分词教程之前向最大正向匹配算法详解(python中文分词库),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python 英文分词工具,python中文分词工具,python中文分词统计词频,python中文分词方向第三方库,python中文分词统计词频,python中文分词库,python中文分词库,python 英文分词工具,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

大家都知道,英文的分词由于单词间是以空格进行分隔的,所以分词要相对的容易些,而中文就不同了,中文中一个句子的分隔就是以字为单位的了,而所谓的正向最大匹配和逆向最大匹配便是一种分词匹配的方法,这里以词典匹配说明。

最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的。

正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配。

首先我们可以规定一个词的最大长度,每次扫描的时候寻找当前开始的这个长度的词来和字典中的词匹配,如果没有找到,就缩短长度继续寻找,直到找到或者成为单字。

下面话不多说了,来一起看看详细的介绍吧。

实例:

S1="计算语言学课程是三个课时" ,设定最大词长MaxLen = 5 ,S2= " "

字典中含有三个词:[计算语言学]、[课程]、[课时]

(1)S2="";S1不为空,从S1左边取出候选子串W="计算语言学";

(2)查词表,“计算语言学”在词表中,将W加入到S2中,S2=“计算语言学/ ”, 并将W从S1中去掉,此时S1="课程是三个课时";

(3)S1不为空,于是从S1左边取出候选子串W="课程是三个";

(4)查词表,W不在词表中,将W最右边一个字去掉,得到W="课程是三";

(5)查词表,W不在词表中,将W最右边一个字去掉,得到W="课程是";

(6)查词表,W不在词表中,将W最右边一个字去掉,得到W="课程"

(7)查词表,W在词表中,将W加入到S2中,S2=“计算语言学/ 课程/ ”,并 将W从S1中去掉,此时S1="是三个课时";

(8)S1不为空,于是从S1左边取出候选子串W="是三个课时";

python中文分词教程之前向最大正向匹配算法详解(python中文分词库)

(9)查词表,W不在词表中,将W最右边一个字去掉,得到W="是三个课";

()查词表,W不在词表中,将W最右边一个字去掉,得到W="是三个";

()查词表,W不在词表中,将W最右边一个字去掉,得到W="是三"

()查词表,W不在词表中,将W最右边一个字去掉,得到W=“是”,这时 W是单字,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ ”,并将 W从S1中去掉,此时S1="三个课时";

()S1不为空,从S1左边取出候选子串W="三个课时";

()查词表,W不在词表中,将W最右边一个字去掉,得到W="三个课";

()查词表,W不在词表中,将W最右边一个字去掉,得到W="三个";

()查词表,W不在词表中,将W最右边一个字去掉,得到W=“三”,这时 W是单字,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ 三/ ”,并 将W从S1中去掉,此时S1="个课时";

()S1不为空,从S1左边取出候选子串W="个课时";

()查词表,W不在词表中,将W最右边一个字去掉,得到W="个课";

()查词表,W不在词表中,将W最右边一个字去掉,得到W=“个”, 这时W是单字,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ 三/ 个/ ",并将W从S1中去掉,此时S1="课时";

()S1不为空,从S1左边取出候选子串W="课时";

()查词表,W在词表中,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ 三/ 个/ 课时/ ",并将W从S1中去掉,此时S1=""。

()S1为空,输出S2作为分词结果,分词过程结束。

而至于为什么选择python这个语言呢?大概是因为我周围人用得少吧,我就想尝试突破,不过我也不讳言,我的C/C++,java等等高级语言用的也不多,虽说编程语言这个东西,基本上只要熟悉一个,其他的都好学,不过我在python上尝到了甜头,索性就用这个语言了。

中文分词算法的Python实现:

脚本接受两个参数,一个是输入文件的路径,另一个是词典的路径。

它的运行方法如下:

当然,这只是最基础的,还可以有很多高级的优化,比如说改成Trie树版本的,控制最大词长度的等等。

总结

标签: python中文分词库

本文链接地址:https://www.jiuchutong.com/biancheng/372153.html 转载请保留说明!

上一篇:详解Python里使用正则表达式的ASCII模式(python基本用法)

下一篇:python使用PyCharm进行远程开发和调试(pycharm如何使用)

  • 公司收到待报解预算收入会计分录
  • 增值税现代服务业6大行业
  • 其他业务成本影响营业成本吗
  • 小规模纳税人税率2023年是多少
  • 劳务 劳务报酬所得
  • 定期定额户个人所得税怎么申报
  • 财务报表提示未审计
  • 未开票收入已缴税额怎么入账
  • 收回以前年度的应收账款,怎么进行账务处理?
  • 研发费用加计扣除留存备查资料
  • 企业可根据实际情况随意设置会计科目
  • 不动产抵扣涉及净值,这里的净值是否扣除减值准备,是否扣除不动产改变用途当月的折旧额?
  • 税法相关问题
  • 租赁农民土地应该开发票吗
  • 营业外支出调减应该填在纳税调整项目明细表哪一项
  • 无形资产管理的基本流程包括无形资产的
  • ukey抄报税全流程视频教程
  • 财务管理和会计学哪个好就业
  • 现金流量表根据什么原则编制
  • 年增收节支总额与新增利税的关系
  • 销售电梯并安装如何缴纳增值税
  • 发票跨期审计调查报告
  • 金蝶软件怎么批量审核凭证
  • 个体户个人所得税预缴纳税申报
  • 企业的无形资产有哪些
  • 司机公里补助用不用交个税
  • 新电商行业
  • 如何获取openai api
  • 基于php实现简单函数
  • 企业内部发生收入怎么算
  • 控制器code是什么意思
  • 财务比率分析的主要内容
  • 存货盘盈如何记账
  • 阿里php面试题
  • 社保申报已扣款还能作废吗
  • 基于改进yolov4论文
  • ps怎么旋转某个图形快捷键
  • 跨年坏账准备转回
  • 进项发票是专票吗
  • 企业做账会计分录流程
  • php获取参数值的三种方式
  • 企业被吊销后能当被告嘛
  • 小程序集合软件
  • 现金折扣属于什么
  • sqlserver验证方式
  • 金税四期怎么监控个人账号
  • SQLserver行转列
  • sql如何进行事务操作
  • 内含报酬率概念
  • 财政直接支付的概念
  • 报考中级会计师考几科
  • 合理损耗如何处理
  • 小规模纳税人低值易耗品摊销方法
  • 辞退福利什么时候确认
  • 小微企业免税如何做账
  • 机票的抵扣进项税的注意事项
  • 工资代扣工会会费协议
  • 公司有主营业务收入没有主营业务成本
  • 固定资产折旧算现金流入吗
  • sql server怎么修改表中数据
  • mysql的子查询语句
  • 修改linux系统ip
  • 电脑连接宽带时出错怎么办
  • winxp如何禁用u盘
  • Win10预览版镜像
  • linux怎么启动进程
  • 升级win10之后东西不见了
  • linux计划任务每天九点
  • 360安全卫士检测出来高危漏洞需要修复吗
  • 游戏引擎的重要性
  • bash 字符串操作
  • 安卓apk混淆工具
  • python 如何
  • angular const
  • js tab选项卡
  • 怎么监控键盘输入
  • python语言的特殊符号
  • python写脚本教程
  • 长沙税务局几点上班下午
  • 我国近十年财政支出结构占比
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设