当前位置: 首页 > ds >正文

关于根据词库分词的算法逻辑实现(最长词汇匹配原则)

import re


def remove_double_brackets(text):
    # 替换掉双括号中的额外括号,只保留一个括号,最长词汇匹配原则
    text=re.sub(r'\(\((.*?)\)(.*?)\)', r'(\1\2)', text)
    text=re.sub(r'\((.*?)\((.*?)\)\)', r'(\1\2)', text)
    text=re.sub(r'\((.*?)\((.*?)\)(.*?)\)', r'(\1\2\3)', text)
    for j in re.findall('\(.*?\)',text):
        if j.count('(')>1:
            return remove_double_brackets(text)
    return text


import os
def fun(data, block, dic, user_dic):
    n = len(data)
    for i in range(n):
        for size in range(block, 1, -1):  # 从最长的块开始,直到长度为2
            if i + size <= n:
                same_word = data[i:i+size]
                if same_word in dic:
                    user_dic.add(same_word)
                    

if __name__ == "__main__":
    ####ss是已知词库
    ss = set(['我爱北京天安门','北京','天安','爱北','张三'])
    ####查找最长词汇
    block = max(len(word) for word in ss)
    a = '我爱北京天安门,天安门上太阳升'
    user_dic = set()
    ####根据最长词汇block窗口大小移动套取词汇
    fun(a, block, ss, user_dic)
    #####得到句子中包含的词汇列表
    print(user_dic)
    #####根据用户词典列表把词汇用括号括起来
    for i in sorted(user_dic,key=len,reverse=True):
        a=a.replace(i,f'({ i })')
    ######过滤多括号嵌套,因为是最长匹配原则
    a=remove_double_brackets(a)
    print(a)

http://www.xdnf.cn/news/12349.html

相关文章:

  • 6月5日day45
  • 《Pytorch深度学习实践》ch8-多分类
  • 空间利用率提升90%!小程序侧边导航设计与高级交互实现
  • 【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信拓扑与操作 BR/EDR(经典蓝牙)和 BLE
  • 从0开始学习R语言--Day17--Cox回归
  • 深度学习张量
  • Postman接口测试之postman设置接口关联,实现参数化
  • selinux firewalld
  • 将HTML内容转换为Canvas图像,主流方法有效防止文本复制
  • RunnablePassthrough介绍和透传参数实战
  • Kinova机械臂在Atlas手术导航系统中的核心作用
  • 外网访问内网服务器常用的三种简单操作步骤方法,本地搭建网址轻松让公网连接
  • java32
  • Monorepo架构: Lerna、NX、Turbo等对比与应用分析
  • ubuntu24.04 搭建 java 环境服务,以及mysql数据库
  • Spring Boot 启动流程及配置类解析原理
  • Jenkins实现自动化部署Springboot项目到Docker容器(Jenkinsfile)
  • 家庭智能监控系统的安全性
  • 20250605在微星X99主板中配置WIN10和ubuntu22.04.6双系统启动的引导设置
  • python版若依框架开发:前端开发规范
  • 专业级PDF转CAD解决方案
  • 邮件分类项目
  • 深入理解React Hooks的原理与实践
  • LeetCode Hot100刷题——零钱兑换
  • uv管理spaCy语言模型
  • SpringCloud-基于SpringAMQP实现消息队列
  • 关于easyexcel动态下拉选问题处理
  • Kerberos面试内容整理-Kerberos 的历史与发展
  • 【Linux】 Linux 进程控制
  • 【Android基础回顾】七:内存管理机制