python双向最大匹配算法_中文分词双向最大匹配python实现

前向最大匹配

def fmmseg(sen,max,strs):

'''

sen: 待切分句子

max: 最大切分长度

strs: 词典列表

'''

maxs=max

returnlist=[]

while len(sen)>0:

while max>0:

if(max==1):

returnlist.append(sen[:1])

sen=sen[1:]

max=maxs

break

else:

word=sen[:max]

if(word in strs):

returnlist.append(word)

sen=sen[max:]

max=maxs

break

else:

max-=1

return returnlist

逆向最大匹配

def bmmseg(sen,max,strs):

'''

sen: 待切分句子

max: 最大切分长度

strs: 词典列表

'''

maxs=max

returnlist=[]

while len(sen)>0:

while max>0:

if(max==1):

returnlist.append(sen[-1:])

sen=sen[:-1]

max=maxs

break

else:

word=sen[-max:]

if(word in strs):

returnlist.append(word)

sen=sen[:-max]

max=maxs

break

else:

max-=1

return returnlist

完整代码

import time

def bmmseg(sen,max,strs):

'''

sen: 待切分句子

max: 最大切分长度

strs: 词典列表

'''

maxs=max

returnlist=[]

while len(sen)>0:

while max>0:

if(max==1):

returnlist.append(sen[-1:])

sen=sen[:-1]

max=maxs

break

else:

word=sen[-max:]

if(word in strs):

returnlist.append(word)

sen=sen[:-max]

max=maxs

break

else:

max-=1

return returnlist

def fmmseg(sen,max,strs):

'''

sen: 待切分句子

max: 最大切分长度

strs: 词典列表

'''

maxs=max

returnlist=[]

while len(sen)>0:

while max>0:

if(max==1):

returnlist.append(sen[:1])

sen=sen[1:]

max=maxs

break

else:

word=sen[:max]

if(word in strs):

returnlist.append(word)

sen=sen[max:]

max=maxs

break

else:

max-=1

return returnlist

if __name__=="__main__":

start=time.time()

print("=============go=============")

str=open("dict.txt",'r',encoding='utf-8').readlines()

strs=[i.strip() for i in str]

sen="你昨天晚上吃饭团了吗"

r=fmmseg(sen,4,strs)

print(r)

r=bmmseg(sen,4,strs)

print(r[::-1])

end=time.time()

print(end-start)

测试字典 dict.txt

吃饭

昨天

晚上

饭团

切分结果

=============go=============

['你', '昨天', '晚上', '吃饭', '团', '了', '吗']

['你', '昨天', '晚上', '吃', '饭团', '了', '吗']

0.0

[Finished in 0.2s]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值