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

自然语言处理--双向匹配算法

自然语言处理作业1--双向匹配算法

一、概述

双向匹配算法是一种用于自然语言处理的算法,用于确定两个文本之间的相似度或匹配程度。该算法通常使用在文本对齐、翻译、语义匹配等任务中。

在双向匹配算法中,首先将两个文本分别进行处理,然后分别从两个文本的角度进行匹配。这种双向匹配可以更全面地考虑两个文本之间的相似性,避免单向匹配算法可能出现的遗漏或错误匹配的情况。

双向匹配算法通常包括以下步骤:

  1. 分词处理:对两个文本分别进行分词处理,将文本分割成词语或短语的序列。
  2. 特征提取:从两个文本中提取特征,如词频、词性、语义信息等。
  3. 匹配计算:使用不同的匹配算法(如余弦相似度、编辑距离等)计算两个文本之间的相似度或匹配程度。
  4. 结果合并:将两个文本的匹配结果进行合并,得到最终的匹配结果。

双向匹配算法能够更准确地捕捉两个文本之间的相似性,提高了文本对齐、翻译、语义匹配等任务的准确性和效率。因此,在自然语言处理领域中得到了广泛的应用。

二、算法描述

正向最大匹配算法是一种中文分词算法,用于将连续的中文文本切分成词语。步骤如下:

  1. 从切分列表的第一个位置开始,取出长为最大词长MaxLen的词语作为子串。
  2. 判断子串是否在词库中存在,若存在则将该词作为分词结果,并将切分列表中对应的部分删除。
  3. 若子串在词库中不存在,则将子串的最后一个字符去掉,得到一个新的子串。
  4. 重复步骤2和步骤3,直到子串为空或切分列表为空。
  5. 返回分词结果。

反向最大算法也是一种中文分词算法,与正向最大匹配算法相反,从待分词文本的末尾开始逆向切分成词语。步骤如下:

  1. 从切分列表最后一个位置开始,取出长为最大词长MaxLen的词语作为子串。
  2. 判断子串是否在词库中存在,若存在则将该词作为分词结果,并将切分列表中对应的部分删除。
  3. 若子串在词库中不存在,则将子串的第一个字符去掉,得到一个新的子串。
  4. 重复步骤2和步骤3,直到子串为空或切分列表为空。
  5. 返回分词结果。

逆向最大匹配算法与正向最大匹配算法的区别在于匹配的方向,逆向最大匹配算法从后往前匹配词语,但原理和步骤与正向最大匹配算法相似。

三、详细描述

以“对外经济技术合作与交流不断扩大。”为例,详细描述算法如下:

正向最大匹配算法:

假设最大词长MaxLen为5

  1. 取子串 “对外经济技”,扫描词典,没有匹配,子串长度减1变为“对外经济”
  2. “对外经济”,扫描词典,没有匹配,子串长度减1变为“对外经”
  3. “对外经”,扫描词典,没有匹配,子串长度减1变为“对外”
  4. 对外”, 扫描词典,有匹配,输出“对外”,输入变为“经济技术合”
  5. “经济技术合”,扫描词典,没有匹配,子串长度减1变为“经济技术”
  6. “经济技术合”,扫描词典,没有匹配,子串长度减1变为“经济技术”
  7. “经济技”,扫描词典,没有匹配,子串长度减1变为“经济”
  8. 经济”,扫描词典,有匹配,输出“经济”,输入变为“技术合作与”
  9. “技术合作与”,扫描词典,没有匹配,子串长度减 1 变为“技术合作”
  10. “技术合作”,扫描词典,没有匹配,子串长度减 1 变为“技术合”
  11. “技术合”,扫描词典,没有匹配,子串长度减 1 变为“技术”
  12. 技术”,扫描词典,有匹配,输出“技术”,输入变为“合作与交流”
  13. “合作与交流”,扫描词典,没有匹配,子串长度减 1 变为“合作与交”
  14. “合作与交”,扫描词典,没有匹配,子串长度减 1 变为“合作与”
  15. “合作与”,扫描词典,没有匹配,子串长度减 1 变为“合作”
  16. 合作”,扫描词典,有匹配,输出“合作”,输入变为“与交流不断”
  17. “与交流不断”,扫描词典,没有匹配,子串长度减 1 变为“与交流不”
  18. “与交流不”,扫描词典,没有匹配,子串长度减 1 变为“与交流”
  19. “与交流”,扫描词典,没有匹配,子串长度减 1 变为“与交”
  20. “与交”,扫描词典,没有匹配,子串长度减 1 变为“与”
  21. 与”,扫描词典,有匹配,输出“与”,输入变为“交流不断扩”
  22. “交流不断扩”,扫描词典,没有匹配,子串长度减 1 变为“交流不断”
  23. “交流不断”,扫描词典,没有匹配,子串长度减 1 变为“交流不”
  24. “交流不”,扫描词典,没有匹配,子串长度减 1 变为“交流”
  25. 交流”,扫描词典,有匹配,输出“交流”,输入变为“不断扩大。”
  26. “不断扩大。”,扫描词典,没有匹配,子串长度减 1 变为“不断扩大”
  27. “不断扩大”,扫描词典,没有匹配,子串长度减 1 变为“不断扩”
  28. “不断扩”,扫描词典,没有匹配,子串长度减 1 变为“不断”
  29. 不断”,扫描词典,有匹配,输出“不断”,输入变为“扩大。”
  30. “扩大。”,扫描词典,没有匹配,子串长度减 1 变为“扩大”
  31. 扩大”,扫描词典,有匹配,输出“扩大”, 输入变为“。”
  32. 。”,扫描词典,有匹配,输入变为“”,扫描终止

正向最大匹配法最终的切分结果为:“对外/经济/技术/合作/与/交流/不断/扩大/。”


反向最大匹配算法:

假设最大词长MaxLen为5

  1. 取子串 “不断扩大。”,扫描词典,没有匹配,子串长度减1变为“不断扩大”
  2. “断扩大。”,扫描词典,没有匹配,子串长度减1变为“扩大。”
  3. “扩大。”,扫描词典,没有匹配,子串长度减1变为“大。”
  4. “大。”,扫描词典,没有匹配,子串长度减1变为“。”
  5. 。”,扫描词典,有匹配,输出“。”,输入变为“流不断扩大”
  6. “流不断扩大”,扫描词典,没有匹配,子串长度减1变为“不断扩大”
  7. “不断扩大”,扫描词典,没有匹配,子串长度减1变为“断扩大”
  8. “断扩大”,扫描词典,没有匹配,子串长度减1变为“扩大”
  9. 扩大”,扫描词典,有匹配,输出“扩大”,输入变为“与交流不断”
  10. “与交流不断”,扫描词典,没有匹配,子串长度减1变为“交流不断”
  11. “交流不断”,扫描词典,没有匹配,子串长度减1变为“流不断”
  12. “流不断”,扫描词典,没有匹配,子串长度减1变为“不断”
  13. 不断”,扫描词典,有匹配,输出“不断”,输入变为“合作与交流”
  14. “合作与交流”,扫描词典,没有匹配,子串长度减1变为“作与交流”
  15. “作与交流”,扫描词典,没有匹配,子串长度减1变为“与交流”
  16. “与交流”,扫描词典,没有匹配,子串长度减1变为“交流”
  17. 交流”,扫描词典,有匹配,输出“交流”,输入变为“技术合作与”
  18. “技术合作与”,扫描词典,没有匹配,子串长度减1变为“术合作与”
  19. “术合作与”,扫描词典,没有匹配,子串长度减1变为“合作与”
  20. “合作与”,扫描词典,没有匹配,子串长度减1变为“作与”
  21. “作与”,扫描词典,没有匹配,子串长度减1变为“与”
  22. 与”,扫描词典,有匹配,输出“与”,输入变为“济技术合作”
  23. “济技术合作”,扫描词典,没有匹配,子串长度减1变为“技术合作”
  24. “技术合作”,扫描词典,没有匹配,子串长度减1变为“术合作”
  25. “术合作”,扫描词典,没有匹配,子串长度减1变为“合作”
  26. 合作”,扫描词典,有匹配,输出“合作”,输入变为“外经济技术”
  27. “外经济技术”,扫描词典,没有匹配,子串长度减1变为“经济技术”
  28. “经济技术”,扫描词典,没有匹配,子串长度减1变为“济技术”
  29. “济技术”,扫描词典,没有匹配,子串长度减1变为“技术”
  30. 技术”,扫描词典,有匹配,输出“技术”,输入变为“对外经济”
  31. “对外经济”,扫描词典,没有匹配,子串长度减1变为“外经济”
  32. “外经济”,扫描词典,没有匹配,子串长度减1变为“经济”
  33. 经济”,扫描词典,有匹配,输出“经济”,输入变为“对外”
  34. 对外”,扫描词典,有匹配,输出“对外”,输入变为“”,扫描终止

反向最大匹配法最终的切分结果为:“对外/经济/技术/合作/与/交流/不断/扩大/。”

四、软件演示

相关文章:

自然语言处理--双向匹配算法

自然语言处理作业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、新建业务模块目录&#xff0c;例如&#xff1a;ruoyi-test。 2、在ruoyi-test业务模块下新建pom.xml文件以及src\main\java&#xff0c;src\main\resources目录。 <?xml version"1.0" encoding"UTF-8&…...

反序列化字符串逃逸(上篇)

首先&#xff0c;必须先明白&#xff0c;这个点并不难&#xff0c;我给大家梳理一遍就会明白。 反序列化字符串逃逸就是序列化过程中逃逸出来字符&#xff0c;是不是很简单&#xff0c;哈哈哈&#xff01; 好了&#xff0c;不闹了&#xff0c;其实&#xff1a; 这里你们只要懂…...

[C++]使用yolov5的onnx模型结合onnxruntime和bytetrack实现目标追踪

【官方框架地址】 yolov5框架&#xff1a;https://github.com/ultralytics/yolov5 bytetrack框架&#xff1a;https://github.com/ifzhang/ByteTrack 【算法介绍】 Yolov5与ByTetrack&#xff1a;目标追踪的强大组合 Yolov5和ByTetrack是两种在目标追踪领域具有显著影响力…...

i2c接口验证

用i2cdetect命令。 1&#xff0c;检测有几组i2c总线在系统上 i2cdetect -l 2&#xff0c;查询i2c总线上挂接的设备及设备的地址 i2cdetect -y <number> i2cdetect -y 0命令用于扫描I2C总线/dev/i2c-0&#xff0c;并列出所有在该总线上存在的有效I2C设备地址。...

1、Pandas 数据结构:从 Series 到 DataFrame

目录 Series 创建 Series Series 索引和选择 DataFrame 创建 DataFrame DataFrame 索引和选择 DataFrame 操作和转换 数据结构转换 Series Series 是 Pandas 中的一维数组形式的数据结构&#xff0c;它可以包含任何数据类型&#xff08;整数、字符串、浮点数、Python对象…...

MySQL函数—字符串函数

MySQL函数—字符串函数 函数功能CONCAT(s1,s2,...sn)字符串拼接&#xff0c;将s1,s2,...sn拼接成一个字符串LOWER(str)将字符串全部转为小写UPPER(str)将字符串全部转为大写LPAD(str,n,pad)左填充&#xff0c;用字符串pad对str左边进行填充&#xff0c;达到n个字符串长度RPAD(s…...

PLC从HTTP服务端获取JSON文件,解析数据到寄存器

智能网关IGT-DSER集成了多种PLC协议&#xff0c;方便实现各种PLC与HTTP服务端之间通讯。通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址&#xff0c;配置URL&#xff0c;即可采用POST命令&#xff0c;将JSON文件提交给HTTP的服务端&#xff1b; 服务端有返回的JSON&…...

LeetCode 46. 全排列

46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#…...

NVMe TCG安全数据存储简介

NVMe&#xff08;非易失性内存主机控制器接口规范&#xff09;与TCG&#xff08;可信计算组&#xff09;的集成主要体现在数据安全、固件验证和硬件信任根等方面&#xff0c;以确保存储设备的数据保护能力和安全性。 TCG Opal定义了一套针对自加密硬盘&#xff08;SED, Self-En…...

Linux命令-ab命令(Apache服务器的性能测试工具 )

Apache服务器的性能测试工具 ab命令 是一个测试你 Apache http 服务器的工具&#xff0c;你可以通过这个工具&#xff0c;指定一个单位时间内向 apache 发出的请求数量来看看你的 Apache 和机器配合的性能如何。 语法 []内容为ab命令后跟的语法&#xff0c;eg&#xff1a;ab …...

蓝桥杯java基础

数组的倒序与隔位输出 时间限制&#xff1a;1.000S 空间限制&#xff1a;128MB 题目描述 给定一个整数数组&#xff0c;编写一个程序实现以下功能&#xff1a; 1. 将输入的整数数组倒序输出&#xff0c;每个数之间用空格分隔。 2. 从正序数组中&#xff0c;每隔一个单位&a…...

Unity3d引擎中使用AIGC生成的360全景图(天空盒)

前言 在这里与Skybox AI一起&#xff0c;一键打造体验无限的360世界&#xff0c;这是这个AIGC一键生成全景图的网站欢迎语。 刚使用它是23年中旬&#xff0c;在没有空去给客户实地拍摄全景图时&#xff0c;可以快速用它生成一些相关的全景图&#xff0c;用作前期沟通的VR de…...

React Router v6 改变页面Title

先说正事再闲聊 1、在路由表加个title字段 2、在index包裹路由 3、在App设置title 闲聊&#xff1a; 看到小黄波浪线了没 就是说默认不支持title字段了 出来的提示&#xff0c; 所以我本来是像下面这样搞的&#xff0c;就是感觉有点难维护&#xff0c;就还是用上面的方法了 …...

postman测试导入文件

01 上传文件参数 1.选择请求方式 选择post请求方式&#xff0c;输入请求地址 2.填写Headers Key&#xff1a;Content-Type &#xff1b; Value&#xff1a;multipart/form-data 如下图 3.填写body 选择form-data&#xff0c;key选择file类型后value会出现按钮&#xff0…...

ZigBee学习(一)

文章目录 一、ZigBee介绍二、IEEE 802.15.42.1 物理层2.2 MAC层2.3 如何实现网络和设备寻址2.4 能量管理 三、ZigBee网络拓扑结构四、ZigBee配置参数 一、ZigBee介绍 ZigBee是一种基于IEEE 802.15.4标准的高级通信协议&#xff0c;它被设计用于低速率、低功耗和短距离无线通信&…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

CppCon 2015 学习:REFLECTION TECHNIQUES IN C++

关于 Reflection&#xff08;反射&#xff09; 这个概念&#xff0c;总结一下&#xff1a; Reflection&#xff08;反射&#xff09;是什么&#xff1f; 反射是对类型的自我检查能力&#xff08;Introspection&#xff09; 可以查看类的成员变量、成员函数等信息。反射允许枚…...

简单介绍C++中 string与wstring

在C中&#xff0c;string和wstring是两种用于处理不同字符编码的字符串类型&#xff0c;分别基于char和wchar_t字符类型。以下是它们的详细说明和对比&#xff1a; 1. 基础定义 string 类型&#xff1a;std::string 字符类型&#xff1a;char&#xff08;通常为8位&#xff09…...