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

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

正在上传…重新上传取消

历史的醉人关注

0.092020.07.01 19:46:46字数 26阅读 965

  • 前向最大匹配
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、付费专栏及课程。

余额充值