自然语言处理(中文分句)——————中文逆向最大匹配,文章中含有验证源码

首先准备一个txt文件,这是一个库。
按行循环读取txt(库)中的字符串存入数组
输入一句话,逆向进行数据字典比对,从后往前数n个字,n为数组中单个最大字符串
一样则保留,在比较其他的

class IMM(object):
    def __init__(self,dic_path):
        #给个这样子的集合
        self.dictionary=set()
        #字典里面最大常数    for example :m=5
        self.maximum=0
        #读取字典
        with open(dic_path,"r",encoding="utf8") as f:
            for line in f:
                #去除空格
                line=line.strip()
                if not line:
                    continue
                self.dictionary.add(line)
                if len(line)>self.maximum:
                    self.maximum=len(line)
    def cut(self,text):
        result=[]
        index=len(text)
        while index>0:
            word=None
            for size in range(self.maximum,0,-1):
                if index-size<0:
                    continue
                piece=text[(index-size):index]
                if piece in self.dictionary:
                    word=piece
                    result.append(word)
                    index-=size
                    break
            if word is None:
                index-=1
        return  result[::-1]



if __name__=="__main__":
    text="南京市长江大桥"
    tokenizer=IMM("data/imm_dic.txt")
    print(tokenizer.cut(text))

在这里插入图片描述
imm_dic.txt

南京市
南京市长
长江大桥
人民解放军
大桥

代码来源于B站,侵权请联系删除

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 34
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不良使

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值