前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >中文分词算法:逆向最大匹配法

中文分词算法:逆向最大匹配法

作者头像
程裕强
发布2019-10-24 23:28:31
1.8K0
发布2019-10-24 23:28:31
举报

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/chengyuqiang/article/details/102719876

1、词典

./data/rmm_dic.utf8

代码语言:javascript
复制
南京市
南京市长
长江大桥
人民解放军
大桥

2、RMM算法

代码语言:javascript
复制
#逆向最大匹配
class RMM(object):
    def __init__(self, dic_path):
        self.dictionary = set()
        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
            # 语法 range(start, stop[, step])
            for size in range(self.maximum, 0, -1):
                # 切片开始位置:index - size
                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]

def main():
    text = "南京市长江大桥"
    tokenizer = RMM('./data/rmm_dic.utf8')
    print(tokenizer.cut(text))

main()

执行结果

代码语言:javascript
复制
['南京市', '长江大桥']
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、词典
  • 2、RMM算法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档