位置: 编程技术 - 正文
推荐整理分享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="是三个课时";
(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 转载请保留说明!友情链接: 武汉网站建设