中文分词算法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="是三个课";
(10)查词表,W不在词表中,将W最右边一个字去掉,得到W="是三个";
(11)查词表,W不在词表中,将W最右边一个字去掉,得到W="是三"
(12)查词表,W不在词表中,将W最右边一个字去掉,得到W=“是”,这时 W是单字,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ ”,并将 W从S1中去掉,此时S1="三个课时";
(13)S1不为空,从S1左边取出候选子串W="三个课时";
(14)查词表,W不在词表中,将W最右边一个字去掉,得到W="三个课";
(15)查词表,W不在词表中,将W最右边一个字去掉,得到W="三个";
(16)查词表,W不在词表中,将W最右边一个字去掉,得到W=“三”,这时 W是单字,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ 三/ ”,并 将W从S1中去掉,此时S1="个课时";
(17)S1不为空,从S1左边取出候选子串W="个课时";
(18)查词表,W不在词表中,将W最右边一个字去掉,得到W="个课";
(19)查词表,W不在词表中,将W最右边一个字去掉,得到W=“个”, 这时W是单字,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ 三/ 个/ ",并将W从S1中去掉,此时S1="课时";
(20)S1不为空,从S1左边取出候选子串W="课时";
(21)查词表,W在词表中,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ 三/ 个/ 课时/ ",并将W从S1中去掉,此时S1=""。
(22)S1为空,输出S2作为分词结果,分词过程结束。
中文分词算法的Python实现:
脚本接受两个参数,一个是输入文件的路径,另一个是词典的路径。
它的运行方法如下:
python max-match.py
#!/usr/bin/env python
import cPickle as pickle
import sys
window_size=5
def max_match_segment(line, dic):
# write your code here
chars = line.decode("utf8")
words = []
idx = 0
while idx < len(chars):
matched = False
for i in xrange(window_size, 0, -1):
cand=chars[idx:idx+i].encode("utf8")
if cand in dic:
words.append(cand)
matched = True
break
if not matched:
i = 1
words.append(chars[idx].encode("utf8"))
idx += i
return words
if __name__=="__main__":
try:
fpi=open(sys.argv[1], "r")
except:
print >> sys.stderr, "failed to open file"
sys.exit(1)
try:
dic = pickle.load(open(sys.argv[2], "r"))
except:
print >> sys.stderr, "failed to load dict %s" % sys.argv[2]
sys.exit(1)
try:
fpo = open("out.txt","w")
except:
print >> sys.stderr, "failed to load out.txt"
sys.exit(1)
for line in fpi:
fpo.write("\t".join( max_match_segment(line.strip(), dic) ))
当然,这只是最基础的,还可以有很多高级的优化,比如说改成Trie树版本的,控制最大词长度的等等。
在Hadoop上运行基于RMM中文分词算法的MapReduce程序
原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词 ...
Mmseg中文分词算法解析
Mmseg中文分词算法解析 @author linjiexing 开发中文搜索和中文词库语义自己主动识别的时候,我採用都是基于mmseg中文分词算法开发的Jcseg开源project.使用场景涉及搜索 ...
分词 | 双向匹配中文分词算法python实现
本次实验内容是基于词典的双向匹配算法的中文分词算法的实现.使用正向和反向最大匹配算法对给定句子进行分词,对得到的结果进行比较,从而决定正确的分词方法. 算法描述正向最大匹配算法先设定扫描的窗口大小ma ...
【nlp】中文分词基础原则及正向最大匹配法、逆向最大匹配法、双向最大匹配法的分析
分词算法设计中的几个基本原则: 1.颗粒度越大越好:用于进行语义分析的文本分词,要求分词结果的颗粒度越大,即单词的字数越多,所能表示的含义越确切,如:“公安局长”可以分为“公安 局长”.“公安局 长” ...
MMSeg中文分词算法
Java中有一些开源的分词项目,比如:IK.Paoding.MMSEG4J等等.这里主要说的是MMSEG4J中使用的MMSeg算法.它的原文介绍在:http://technology.chtsai.o ...
中文分词算法工具hanlp源码解析
词图 词图指的是句子中所有词可能构成的图.如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B).一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图. 需要稀疏2维 ...
hanlp源码解析之中文分词算法详解
词图 词图指的是句子中所有词可能构成的图.如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B).一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图. 需要稀疏2维 ...
MMSEG 中文分词算法 翻译
算法原文位于:http://technology.chtsai.org/mmseg/ http://www.360doc.com/content/13/0217/15/11619026_2661428 ...
算法:二分查找(python版)
#!/usr/bin/env python #coding -*- utf:8 -*- #二分查找#时间复杂度O(logn)#一个时间常量O(1)将问题的规模缩小一半,则O(logn) import ...
随机推荐
Unity3D设计原则
原则1:单一职责 原则2:里氏替换原则(子类扩展但不改变父类功能) 原则3:依赖倒置原则 原则4:接口隔离原则 原则5:迪米特法则(最少知道原则) 原则6:开闭原则 原则1:单一职责原则 说到单一职责 ...
使用git将代码push到osc上
1.下载git客户端 2.在osc上创建项目 ①使用:git bash here ②在目录下执行:git init ③ssh-keygen -t rsa -C "xqs@gmail.com& ...
HDU 4049 Tourism Planning(动态规划)
Tourism Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
JS代码的加载
HTML页面中JS的加载原理:在加载HTML页面的时候,当浏览器遇到内嵌的JS代码时会停止处理页面,先执行JS代码,然后再继续解析和渲染页面.同样的情况也发生在外链的JS文件中,浏览器必须先花时间下载 ...
mac(osx) apache无法启动 localhost无法访问服务器[]
问题描述:由于删除了/private/var/log下面的日志,导致重启电脑后apache无法正常工作. 删除log的初衷是:当系统用久了,日志文件占据了几十个G的硬盘容量. 造成的后果:重启电脑后a ...
mybatis缓存创建过程
带着 上篇 的问题,再来看看mybatis的创建过程 1.从SqlSessionFactoryBuilder解析mybatis-config.xml开始 对文件流解析 XMLConfigBuilder ...
jquery 中ajax的参数
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...
mvc设计模式的优点
软件设计的理念是:高内聚,低耦合.采用三层: UI:(jsp,servlet), service:(具体的业务实现), dao:(对数据库的操作) 的设计模式来指导项目开发可以使得项目各层之间是一个粗 ...
Mac idea 执行testng用例,提示%MODULE_WORKING_DIR%目录不存在解决办法
idea 下载git代码 执行testng用例,报错: 下午4:47 Error running 'Test.apkStart': Cannot start process, the working ...
springBoot bean注入
1.@Component:把普通pojo实例化到spring容器中,相当于配置文件中的 2.@Autow ...
中文分词算法python代码_中文分词算法之最大正向匹配算法(Python版)相关推荐
- 人工鱼群算法python代码_人工鱼群算法python_鱼群算法 - Brillou的个人空间 - OSCHINA - 中文开源技术交流社区......
本算法是参照李晓磊博士的论文实现的,详细的算法原理可阅读<一种新型的智能优化方法_人工鱼群算法_李晓磊> 算法基于鱼群的生存行为:在一片水域中,鱼存在的数目最多的地方就是本水域中富含营养物 ...
- apriori算法python代码_通俗易懂Apriori算法及Python实现
本篇分为三个部分: 一.算法背景 啤酒与尿布故事: 某超市为增加销售量,提取出了他们超市所有的销售记录进行分析.在对这些小票数据进行分析时,发现男性顾客在购买婴儿尿片时,通常会顺便搭配带打啤酒来犒劳自 ...
- knn的python代码_《机器学习实战》之一:knn(python代码)
数据 标称型和数值型 算法 归一化处理:防止数值较大的特征对距离产生较大影响 计算欧式距离:测试样本与训练集 排序:选取前k个距离,统计频数(出现次数)最多的类别 def classify0(inX, ...
- 牛顿法python代码_一文看懂牛顿法(附Python实现)
这是一个数据分析师的在线笔试编程题:不能使用数学库函数,求出一个数的算术平方根 是不是看的一脸懵逼? 这里就需要用到一个很常用的求解方法了 -- 牛顿迭代法,也被称作牛顿法 (Newton's Met ...
- python代码_零基础小白必看篇:Python代码注释规范代码实例解析操作(收藏)
本文内容主要介绍了Python代码注释规范代码实例解析,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! 一.代码注释介绍 注释就是对代码的解释和说明 ...
- 牛逼的python代码_牛逼啊!一个随时随地写Python代码的神器
现在学Python的人越来越多,很多小伙伴都非常有激情,利用碎片时间随时随地学习Python, 大家知道Python是一门编程语言,但是学语言光看不练是没有用的.最好能编程并运行,有没有什么好的神器可 ...
- a*算法matlab代码_导向滤波算法及其matlab代码实现
导向滤波同样是一种平滑滤波算法,其与最小二乘滤波和双边滤波相比,同样是一种具有边缘保持的功能的图形滤波算法,可以用于处理图形噪点较多的图像,而且此种滤波算法与最小二乘滤波和双边滤波相比,有其独特的特点 ...
- 正向最大匹配算法 python代码_中文分词算法之最大正向匹配算法(Python版)
最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...
- slope one 推荐算法python 代码_协同推荐算法实践之Slope One的介绍(转)
Slope One 之一 : 简单高效的协同过滤算法(转)(
最新文章
- Git 修改用户名和邮箱
- 多线程threading
- python 零基础学习之路-01 计算机硬件
- what should you do at the new arrival of the place
- 操作系统原理:读写者经典同步问题
- Android 使用SeekBar调节系统音量
- 超硬核!躺进BAT以后我总结了出现最多的15道数组题
- java连接数据库(sqlserver和mysql)
- “狮”口逃生!长颈鹿勇斗狮群 4小时后脱身
- linux笔记本风扇调节,Linux下笔记本的风扇控制问题
- 服务器装系统鼠标键盘不能动,装系统鼠标键盘不能动
- vivo手机支持html,vivo5G手机如何设置5G?教你开启SA模式
- 我的团长我的团第二十七集
- 第6章第1节:基本设计理论:幻灯片设计过程中的七个常见技巧 [PowerPoint精美幻灯片实战教程]
- webpack安装使用教程
- US1MF-ASEMI贴片快恢复二极管US1MF
- DECIMAL Data Type Characteristics
- 二阶线性微分方程解的结构(齐次与非齐次)+ 常数变易法 | 高阶微分方程(二)
- (198)ISE14.7生成bit文件压缩方法
- Jackson之JSON序列化和多态反序列化
热门文章
- sqlserver c#:关于CommandType的取值
- MySQL使用SQL语句修改表名
- 通讯录管理系统(cpp)
- 云队友丨“悟空”倒下,知乎难安
- source insight 破解版
- .misc 可爱的故事
- Jetson TX1开发笔记(一):开机设置与刷机
- 白话设计模式-模板方法模式
- 用c语言程序画圣诞树,【图片】用C语言画一棵“圣诞树”(前方高能,学渣小心避让!)【广西科技大学吧】_百度贴吧...
- [转载] 七龙珠第一部——第096话 克林大作战