自然语言处理--双向匹配算法
自然语言处理作业1--双向匹配算法
一、概述
双向匹配算法是一种用于自然语言处理的算法,用于确定两个文本之间的相似度或匹配程度。该算法通常使用在文本对齐、翻译、语义匹配等任务中。
在双向匹配算法中,首先将两个文本分别进行处理,然后分别从两个文本的角度进行匹配。这种双向匹配可以更全面地考虑两个文本之间的相似性,避免单向匹配算法可能出现的遗漏或错误匹配的情况。
双向匹配算法通常包括以下步骤:
- 分词处理:对两个文本分别进行分词处理,将文本分割成词语或短语的序列。
- 特征提取:从两个文本中提取特征,如词频、词性、语义信息等。
- 匹配计算:使用不同的匹配算法(如余弦相似度、编辑距离等)计算两个文本之间的相似度或匹配程度。
- 结果合并:将两个文本的匹配结果进行合并,得到最终的匹配结果。
双向匹配算法能够更准确地捕捉两个文本之间的相似性,提高了文本对齐、翻译、语义匹配等任务的准确性和效率。因此,在自然语言处理领域中得到了广泛的应用。
二、算法描述
正向最大匹配算法是一种中文分词算法,用于将连续的中文文本切分成词语。步骤如下:
- 从切分列表的第一个位置开始,取出长为最大词长MaxLen的词语作为子串。
- 判断子串是否在词库中存在,若存在则将该词作为分词结果,并将切分列表中对应的部分删除。
- 若子串在词库中不存在,则将子串的最后一个字符去掉,得到一个新的子串。
- 重复步骤2和步骤3,直到子串为空或切分列表为空。
- 返回分词结果。
反向最大算法也是一种中文分词算法,与正向最大匹配算法相反,从待分词文本的末尾开始逆向切分成词语。步骤如下:
- 从切分列表最后一个位置开始,取出长为最大词长MaxLen的词语作为子串。
- 判断子串是否在词库中存在,若存在则将该词作为分词结果,并将切分列表中对应的部分删除。
- 若子串在词库中不存在,则将子串的第一个字符去掉,得到一个新的子串。
- 重复步骤2和步骤3,直到子串为空或切分列表为空。
- 返回分词结果。
逆向最大匹配算法与正向最大匹配算法的区别在于匹配的方向,逆向最大匹配算法从后往前匹配词语,但原理和步骤与正向最大匹配算法相似。
三、详细描述
以“对外经济技术合作与交流不断扩大。”为例,详细描述算法如下:
正向最大匹配算法:
假设最大词长MaxLen为5
- 取子串 “对外经济技”,扫描词典,没有匹配,子串长度减1变为“对外经济”
- “对外经济”,扫描词典,没有匹配,子串长度减1变为“对外经”
- “对外经”,扫描词典,没有匹配,子串长度减1变为“对外”
- “对外”, 扫描词典,有匹配,输出“对外”,输入变为“经济技术合”
- “经济技术合”,扫描词典,没有匹配,子串长度减1变为“经济技术”
- “经济技术合”,扫描词典,没有匹配,子串长度减1变为“经济技术”
- “经济技”,扫描词典,没有匹配,子串长度减1变为“经济”
- “经济”,扫描词典,有匹配,输出“经济”,输入变为“技术合作与”
- “技术合作与”,扫描词典,没有匹配,子串长度减 1 变为“技术合作”
- “技术合作”,扫描词典,没有匹配,子串长度减 1 变为“技术合”
- “技术合”,扫描词典,没有匹配,子串长度减 1 变为“技术”
- “技术”,扫描词典,有匹配,输出“技术”,输入变为“合作与交流”
- “合作与交流”,扫描词典,没有匹配,子串长度减 1 变为“合作与交”
- “合作与交”,扫描词典,没有匹配,子串长度减 1 变为“合作与”
- “合作与”,扫描词典,没有匹配,子串长度减 1 变为“合作”
- “合作”,扫描词典,有匹配,输出“合作”,输入变为“与交流不断”
- “与交流不断”,扫描词典,没有匹配,子串长度减 1 变为“与交流不”
- “与交流不”,扫描词典,没有匹配,子串长度减 1 变为“与交流”
- “与交流”,扫描词典,没有匹配,子串长度减 1 变为“与交”
- “与交”,扫描词典,没有匹配,子串长度减 1 变为“与”
- “与”,扫描词典,有匹配,输出“与”,输入变为“交流不断扩”
- “交流不断扩”,扫描词典,没有匹配,子串长度减 1 变为“交流不断”
- “交流不断”,扫描词典,没有匹配,子串长度减 1 变为“交流不”
- “交流不”,扫描词典,没有匹配,子串长度减 1 变为“交流”
- “交流”,扫描词典,有匹配,输出“交流”,输入变为“不断扩大。”
- “不断扩大。”,扫描词典,没有匹配,子串长度减 1 变为“不断扩大”
- “不断扩大”,扫描词典,没有匹配,子串长度减 1 变为“不断扩”
- “不断扩”,扫描词典,没有匹配,子串长度减 1 变为“不断”
- “不断”,扫描词典,有匹配,输出“不断”,输入变为“扩大。”
- “扩大。”,扫描词典,没有匹配,子串长度减 1 变为“扩大”
- “扩大”,扫描词典,有匹配,输出“扩大”, 输入变为“。”
- “。”,扫描词典,有匹配,输入变为“”,扫描终止
正向最大匹配法最终的切分结果为:“对外/经济/技术/合作/与/交流/不断/扩大/。”
反向最大匹配算法:
假设最大词长MaxLen为5
- 取子串 “不断扩大。”,扫描词典,没有匹配,子串长度减1变为“不断扩大”
- “断扩大。”,扫描词典,没有匹配,子串长度减1变为“扩大。”
- “扩大。”,扫描词典,没有匹配,子串长度减1变为“大。”
- “大。”,扫描词典,没有匹配,子串长度减1变为“。”
- “。”,扫描词典,有匹配,输出“。”,输入变为“流不断扩大”
- “流不断扩大”,扫描词典,没有匹配,子串长度减1变为“不断扩大”
- “不断扩大”,扫描词典,没有匹配,子串长度减1变为“断扩大”
- “断扩大”,扫描词典,没有匹配,子串长度减1变为“扩大”
- “扩大”,扫描词典,有匹配,输出“扩大”,输入变为“与交流不断”
- “与交流不断”,扫描词典,没有匹配,子串长度减1变为“交流不断”
- “交流不断”,扫描词典,没有匹配,子串长度减1变为“流不断”
- “流不断”,扫描词典,没有匹配,子串长度减1变为“不断”
- “不断”,扫描词典,有匹配,输出“不断”,输入变为“合作与交流”
- “合作与交流”,扫描词典,没有匹配,子串长度减1变为“作与交流”
- “作与交流”,扫描词典,没有匹配,子串长度减1变为“与交流”
- “与交流”,扫描词典,没有匹配,子串长度减1变为“交流”
- “交流”,扫描词典,有匹配,输出“交流”,输入变为“技术合作与”
- “技术合作与”,扫描词典,没有匹配,子串长度减1变为“术合作与”
- “术合作与”,扫描词典,没有匹配,子串长度减1变为“合作与”
- “合作与”,扫描词典,没有匹配,子串长度减1变为“作与”
- “作与”,扫描词典,没有匹配,子串长度减1变为“与”
- “与”,扫描词典,有匹配,输出“与”,输入变为“济技术合作”
- “济技术合作”,扫描词典,没有匹配,子串长度减1变为“技术合作”
- “技术合作”,扫描词典,没有匹配,子串长度减1变为“术合作”
- “术合作”,扫描词典,没有匹配,子串长度减1变为“合作”
- “合作”,扫描词典,有匹配,输出“合作”,输入变为“外经济技术”
- “外经济技术”,扫描词典,没有匹配,子串长度减1变为“经济技术”
- “经济技术”,扫描词典,没有匹配,子串长度减1变为“济技术”
- “济技术”,扫描词典,没有匹配,子串长度减1变为“技术”
- “技术”,扫描词典,有匹配,输出“技术”,输入变为“对外经济”
- “对外经济”,扫描词典,没有匹配,子串长度减1变为“外经济”
- “外经济”,扫描词典,没有匹配,子串长度减1变为“经济”
- “经济”,扫描词典,有匹配,输出“经济”,输入变为“对外”
- “对外”,扫描词典,有匹配,输出“对外”,输入变为“”,扫描终止
反向最大匹配法最终的切分结果为:“对外/经济/技术/合作/与/交流/不断/扩大/。”
四、软件演示

相关文章:
自然语言处理--双向匹配算法
自然语言处理作业1--双向匹配算法 一、概述 双向匹配算法是一种用于自然语言处理的算法,用于确定两个文本之间的相似度或匹配程度。该算法通常使用在文本对齐、翻译、语义匹配等任务中。 在双向匹配算法中,首先将两个文本分别进行处理,然后…...
IDEA 2023.3.2 安装教程
1.下载2023.3.2版本IDEA 链接:https://pan.baidu.com/s/1RkXBLz6qxsd8VxXuvXCEMA?pwd5im6 提取码:5im6 2.安装 3.解压文件,进入,选择方式3 4.将下面文件夹复制到任意位置(不要有中文路径) 5.进入下面文…...
C语言常见面试题:什么是宏,宏的作用是什么?
宏在计算机科学中是一种批量处理程序命令,它是一种抽象的规则或模式,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是字符串)。在编译时,预处理器会对宏进行…...
【0248】Background Writing实现机制分析
文章目录 1. 前言2. 有了checkpoint,为何还需要background writing?2.1 checkpoint和background writing有何差异? 如何协同工作?2.2 background writing如何工作? 职责是什么?1. 前言 本文是Background Writing进程理论篇,源码剖析实战篇会在后面给出。本文的主要内容…...
基于springboot+vue的教师工作量管理系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…...
4-新建子模块(尝鲜)
新建子模块 Maven多模块下新建子模块流程案例。 1、新建业务模块目录,例如:ruoyi-test。 2、在ruoyi-test业务模块下新建pom.xml文件以及src\main\java,src\main\resources目录。 <?xml version"1.0" encoding"UTF-8&…...
反序列化字符串逃逸(上篇)
首先,必须先明白,这个点并不难,我给大家梳理一遍就会明白。 反序列化字符串逃逸就是序列化过程中逃逸出来字符,是不是很简单,哈哈哈! 好了,不闹了,其实: 这里你们只要懂…...
[C++]使用yolov5的onnx模型结合onnxruntime和bytetrack实现目标追踪
【官方框架地址】 yolov5框架:https://github.com/ultralytics/yolov5 bytetrack框架:https://github.com/ifzhang/ByteTrack 【算法介绍】 Yolov5与ByTetrack:目标追踪的强大组合 Yolov5和ByTetrack是两种在目标追踪领域具有显著影响力…...
i2c接口验证
用i2cdetect命令。 1,检测有几组i2c总线在系统上 i2cdetect -l 2,查询i2c总线上挂接的设备及设备的地址 i2cdetect -y <number> i2cdetect -y 0命令用于扫描I2C总线/dev/i2c-0,并列出所有在该总线上存在的有效I2C设备地址。...
1、Pandas 数据结构:从 Series 到 DataFrame
目录 Series 创建 Series Series 索引和选择 DataFrame 创建 DataFrame DataFrame 索引和选择 DataFrame 操作和转换 数据结构转换 Series Series 是 Pandas 中的一维数组形式的数据结构,它可以包含任何数据类型(整数、字符串、浮点数、Python对象…...
MySQL函数—字符串函数
MySQL函数—字符串函数 函数功能CONCAT(s1,s2,...sn)字符串拼接,将s1,s2,...sn拼接成一个字符串LOWER(str)将字符串全部转为小写UPPER(str)将字符串全部转为大写LPAD(str,n,pad)左填充,用字符串pad对str左边进行填充,达到n个字符串长度RPAD(s…...
PLC从HTTP服务端获取JSON文件,解析数据到寄存器
智能网关IGT-DSER集成了多种PLC协议,方便实现各种PLC与HTTP服务端之间通讯。通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址,配置URL,即可采用POST命令,将JSON文件提交给HTTP的服务端; 服务端有返回的JSON&…...
LeetCode 46. 全排列
46. 全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2: 输入&#…...
NVMe TCG安全数据存储简介
NVMe(非易失性内存主机控制器接口规范)与TCG(可信计算组)的集成主要体现在数据安全、固件验证和硬件信任根等方面,以确保存储设备的数据保护能力和安全性。 TCG Opal定义了一套针对自加密硬盘(SED, Self-En…...
Linux命令-ab命令(Apache服务器的性能测试工具 )
Apache服务器的性能测试工具 ab命令 是一个测试你 Apache http 服务器的工具,你可以通过这个工具,指定一个单位时间内向 apache 发出的请求数量来看看你的 Apache 和机器配合的性能如何。 语法 []内容为ab命令后跟的语法,eg:ab …...
蓝桥杯java基础
数组的倒序与隔位输出 时间限制:1.000S 空间限制:128MB 题目描述 给定一个整数数组,编写一个程序实现以下功能: 1. 将输入的整数数组倒序输出,每个数之间用空格分隔。 2. 从正序数组中,每隔一个单位&a…...
Unity3d引擎中使用AIGC生成的360全景图(天空盒)
前言 在这里与Skybox AI一起,一键打造体验无限的360世界,这是这个AIGC一键生成全景图的网站欢迎语。 刚使用它是23年中旬,在没有空去给客户实地拍摄全景图时,可以快速用它生成一些相关的全景图,用作前期沟通的VR de…...
React Router v6 改变页面Title
先说正事再闲聊 1、在路由表加个title字段 2、在index包裹路由 3、在App设置title 闲聊: 看到小黄波浪线了没 就是说默认不支持title字段了 出来的提示, 所以我本来是像下面这样搞的,就是感觉有点难维护,就还是用上面的方法了 …...
postman测试导入文件
01 上传文件参数 1.选择请求方式 选择post请求方式,输入请求地址 2.填写Headers Key:Content-Type ; Value:multipart/form-data 如下图 3.填写body 选择form-data,key选择file类型后value会出现按钮࿰…...
ZigBee学习(一)
文章目录 一、ZigBee介绍二、IEEE 802.15.42.1 物理层2.2 MAC层2.3 如何实现网络和设备寻址2.4 能量管理 三、ZigBee网络拓扑结构四、ZigBee配置参数 一、ZigBee介绍 ZigBee是一种基于IEEE 802.15.4标准的高级通信协议,它被设计用于低速率、低功耗和短距离无线通信&…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
