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

【Python机器学习】NLP信息提取——正则模式

我们需要一种模式匹配算法,该算法可以识别与模式匹配的字符序列或词序列,以便从较长的文本字符串中“提取”它们。构建这种模式匹配算法的简单方法是在Python中,使用一系列if/else语句在字符串的逐个位置查找该符号(单词或字符)。假设想在语句开头找到一些常见的问候语,例如“Hi”、“Hello”、“Yo”,可以按照下面的代码操作:

def find_greeting(s):if s[0]=="H":if s[:3] in ['Hi','Hi ','Hi,','Hi!']:return s[:2]elif s[:6] in ['Hello','Hello ','Hello,','Hello!']:return s[:5]elif s[0]=="Y":if s[1]=='o' and s[:3] in ['Yo','Yo ','Yo,','Yo!']:return s[:2]return None

下面是它的运行效果:

print(find_greeting('Hi Mr.Turning!'))
print(find_greeting('Hello,Tom.'))
print(find_greeting('hello'))
print(find_greeting('HelloWorld'))

可以考哪懂啊,通过这种方式编写模式匹配算法十分烦琐。甚至效果一般,它非常脆弱,依赖字符串中字符拼写、大小写以及位置的精确表达。指定所有“分隔符”也非常棘手,这些“分隔符”包括标点符号、空白字符,或者要查找的单词两边的字符串的开头和结尾字符。

如果允许指定要查找的不同单词或字符串,而无须将其硬编码为上述Python表达式。甚至可以在单独的函数中指定分隔符,通过分词和迭代查询技术,可以在字符串的任意位置中找到待查词,但这样的工作里非常大。

幸运的是,模式匹配引擎已经被集成到大多数现代计算机语言中,它就是正则表达式。

正则表达式

正则表达式是一种用特殊的计算机语言编写的字符串,可以用于指定匹配算法。如果同样实现上述匹配模式,使用正则表达式要比编写Python代码更加强大、灵活和简洁。因此正则表达式是许多涉及模式匹配的NLP问题首选的模式定义语言。使用正则表达式的NLP应用是对原先用于编译和解释形式语言(计算机语言)的扩展。

正则表达式定义有限状态机或FSM——关于符号序列的“if-then”决策树,例如上述代码中的find_greeting()函数。序列中的符号被逐个输入FSM决策树中。对诸如ASCII字符串或一系列英语单词之类的符号序列进行处理的有限状态机称为语法。它们也被称为形式语法,以便和自然语言语法规则区分开来。

在计算机科学和数学中,“语法”一次指的是一组规则,用于确定符号序列是否是特定语言的合法成员,这些语言通常称为计算机语言或形式语言。计算机语言或形式语言是与定义该语言的形式语法匹配的所有语句集。这是一种循环定义,但有时就是数学的工作方式。

把信息提取当作机器学习里的特征提取任务

之所以从基于语法的NLP方法转向了支持基于机器学习和数据驱动的方法、再次使用硬编码(手动编写)的正则表达式和模式,是因为基于统计或数据驱动的NLP方法存在局限性。

我们希望机器学习流水线能够执行一些基本操作,例如回答逻辑问题,或根据NLP指令执行诸如安排日程等操作。但这些场景下机器学习往往达不到预期效果。我们很少有标注好的训练集,能够涵盖人们用自然语言可能剔除的所有问题的答案。另外,可以定义一组紧凑的条件检查(正则表达式)以从自然语言字符串中提取关键的信息。这种方法可以解决很大一部分问题。

模式匹配(和正则表达式)仍然是最好的信息提取办法。即使使用机器学习方法进行自然语言处理,我们也需要完成特征工程。我们需要创建词袋模型或词嵌入表示,从而将自然语言文字中近乎无限可能的语言压缩到计算机可以轻松处理的向量中。信息提取只是从非结构化自然语言数据中提取机器学习特征的另一种形式,例如创建单词模型或在该词袋模型上进行PCA。这些模式和特征也同样用于最先进的自然语言机器学习流水线。

信息提取用于找到那些我们希望聊天机器人拥有的“在嘴边但说不出来”的语句和信息。我们可以事先通过信息提取来填充知识库的内容。或者,当询问机器人问题或查询搜索引擎时,信息提取可以用来按需查找语句和信息。当提取构建知识库时,可以优化数据结构以便在更大的知识领域内更快进行查询。预构建知识库使聊天机器人能够快速响应有关更广泛信息的问题。如果信息检索是随着查询聊天机器人实时进行的,这一版被称为“搜索”。很多搜索引擎结合了这两种技术,如果查询知识图谱(知识库)找不到需要的信息,则回退到文本搜索。许多自然语言语法规则都可以使用形式语法进行编码,该形式语法旨在对词或者代表词性的符号进行操作。英语可以被认为是构成上述语言的单词和语法规则。或者可以将其视为可以说出的所有可能语句的集合,这些语句被英语使用者认为是有效的。

这带来了形式语法和有限状态机的另一个特性,它将在NLP中派上用场。计算机可以通过两种方式使用形式语法:

  • 识别与该语法匹配的字符串;
  • 通过该语法生成新的符号序列。

我们不仅可以使用模式(正则表达式)从自然语言中提取信息,还可以在聊天机器人中使用这些模式,从而让聊天机器人“说出”与该模式匹配的内容。

这些用于模式匹配的形式语法和有限状态机还有一些很酷的功能。一个真正的有限状态机可以保证始终在有限时间内运行(停止)。它一定会告诉我们是否在字符串中找到了匹配项。它用于不会陷入死循环,只要我们不使用正则表达式引擎的某些高级功能,这些功能允许我们“作弊”并将死循环添加到有限状态机中。

因此,我们将使用不包括“后向环视”或“前向环视”这类作弊方式的正则表达式。我们将确保正则表达式匹配器会处理每个字符并且只有当它匹配时才移动到下一个字符。

相关文章:

【Python机器学习】NLP信息提取——正则模式

我们需要一种模式匹配算法,该算法可以识别与模式匹配的字符序列或词序列,以便从较长的文本字符串中“提取”它们。构建这种模式匹配算法的简单方法是在Python中,使用一系列if/else语句在字符串的逐个位置查找该符号(单词或字符&am…...

opc服务器与opc服务器如何通讯

OPC(OLE for Process Control,即过程控制对象链接)是一种工业自动化领域常用的通讯协议,它提供了一种标准化的方式,使得不同厂家的设备可以互相通讯。OPC服务器是运行在计算机上的软件程序,用于接收和处理来…...

指针 (六)

OK,书接上回,咱们继续: 一 . 函数指针变量 (1)函数指针变量的创建 首先我们得明白,什么是函数指针变量呢?从我们之前学习过的整型指针,数组指针的相关知识当中,通过类…...

Linux下vscode配置C++和python编译调试环境

Visual Studio Code (简称 VSCode) 是由微软开发的一款免费、开源、跨平台的代码编辑器。它支持 Windows、macOS 和 Linux 操作系统,并且内置对多种编程语言的支持,包括但不限于 C/C、Python、JavaScript、TypeScript、Java 和 Go 等。VSCode 主要用于编…...

OrionX GPU算力池助力AI OCR场景应用

01 AI OCR的历史及概念 OCR(Optical Character Recognition,光学字符识别)是指采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文…...

移动端如何实现智能语音交互

智能语音交互(Intelligent Speech Interaction)是基于语音识别、语音合成、自然语言理解等技术,为企业在多种实际应用场景下,赋予产品“能听、会说、懂你”式的智能人机交互功能。适用于智能问答、智能质检、法庭庭审实时记录、实…...

HTTPS:构建安全通信的基石

HTTPS(Hypertext Transfer Protocol Secure),作为互联网上安全通信的基石,通过在HTTP基础上引入SSL/TLS协议层,实现了数据传输的加密,确保了信息的机密性、完整性和真实性。这一过程涉及多个精细设计的步骤…...

OceanBase 企业版OMS 4.2.3的使用

OceanBase 企业版OMS 4.2.3的使用 一、界面说明 1.1 概览 1.2 数据迁移 1.3 数据同步 1.4 数据源管理 1.5 运维监控 1.6 系统管理 二、功能说明 注意: 在数据迁移与数据同步的功能中,如果涉及到增量操作: 1.需要使用sys租户的用…...

STM32中的计时与延时

前言 在裸机开发中,延时作为一种规定循环周期的方式经常被使用,其中尤以HAL库官方提供的HAL_Delay为甚。刚入门的小白可能会觉得既然有官方提供的延时函数,而且精度也还挺好,为什么不用呢?实际上HAL_Delay中有不少坑,而这些也只是HAL库中无数坑的其中一些。想从坑里跳出来…...

[论文笔记] CSFCN

摘要 上下文建模或多级特征融合方法已被证明可以有效提高语义分割性能。 然而,它们并不是专门处理像素上下文不匹配和空间特征不对齐的问题,并且高计算复杂度阻碍了它们在实时场景中的广泛应用。 在这项工作中,我们提出了一种轻量级的上下文…...

mac电脑命令行获取电量

在 macOS 上,有几个命令行工具可以用来获取电量信息,最常用的是 pmset 命令。你可以通过以下方式来查看电池状态和电量信息: 查看电池状态: pmset -g batt这个命令会返回类似下面的输出: Now drawing from Battery Pow…...

2024桥梁科技两江论坛——第二届桥梁工程安全与韧性学术会议

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网:https://ais.cn/u/vEbMBz提交检索:EI Compendex、IEEE Xplore、Scopus 三、大会介绍 2024年桥梁科技两江论坛——第二届桥梁工程…...

性能测试-jmeter的控制器(十六)

一、if控制器 需求:使用“用户自定义变量”定义name变量,值可以是“baidu”或“itcast”,使用变量值,控制是否访问对应网站。 1、步骤: 在测试计划中添加用户定义的变量name,取值可为baidu或itcast添加两个http请求&#xff1a…...

直播开播极速流,如何有效接入?

如何有效接入开播极速流?为什么你的直播流速会逐渐下降?开播极速流实际上是我们流速的巅峰阶段,这一阶段的流量构成通常是70%的老粉丝和30%的新粉丝。你是否意识到这一点呢? 在直播开始时,欢迎新老粉丝的互动很重要。比…...

stm32 W25Q数据存储

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、cubemx配置二、keil中文件修改与配置三、几个重要函数的说明四、DMA方式传输(待写)总结 前言 W25Q128 容量为128位 128/8 16 也就…...

深度学习的笔记

1. 从huggingface上仅下载pytorch模型权重和配置文件到服务器 import os import shutil from huggingface_hub import snapshot_download# 直接指定模型和下载路径 model_name openai/clip-vit-base-patch32 download_path /home/xxx/.cache/huggingface/hub/models--anas-a…...

音视频入门基础:AAC专题(8)——FFmpeg源码中计算AAC裸流AVStream的time_base的实现

一、引言 本文讲解FFmpeg源码对AAC裸流行解复用(解封装)时,其AVStream的time_base是怎样被计算出来的。 二、FFmpeg源码中计算AAC裸流AVStream的time_base的实现 FFmpeg对AAC裸流进行解复用(解封装)时,其…...

React 组件的基本使用,useState 状态变量的使用

React 组件 组件是什么 ##### 概念:一个组件就是用户界面的一部分,它可以有自己的逻辑和外观,组件之间可以相互嵌套,也可以多次复用。 在 React,一个组件就是首字母大写的函数,内部存放了组件的逻辑和视…...

空洞骑士 Hollow Knight 攻略

文章目录 Part.I IntroductionPart.II 攻略Chap.I 地图Chap.II 护符Chap.III BOSSChap.IV 魔法 Reference Part.I Introduction 《空洞骑士》是独立团队 Team Cherry 开发的一款 2D 类银河恶魔城动作冒险游戏。本文记录笔者玩此游戏所积累的一些经验。 「在《空洞骑士》中打造…...

CSP-J 算法基础 广度优先搜索BFS

文章目录 前言广度优先搜索是什么广度优先搜索的实现BFS 的具体编程实现举例:广度优先搜索的具体步骤初始状态:步骤 1:加入起点节点 1步骤 2:访问队列中的节点 1,加入其邻居节点 2 和 4步骤 3:访问队列中的…...

What is new in C# 7,8,9,10

目录 Whats new in C# 7 C# 7 in Visual Studio 2017 Out Variables Pattern Matching Tuples (System.ValueTuple) Deconstruct解构 Local Functions Ref Returns and Locals Expression Bodied Members Throw Expressions Generated Async R…...

Sqlserver常用sql

1. 数据库和表操作 创建数据库 CREATE DATABASE DatabaseName; 删除数据库 DROP DATABASE DatabaseName; 创建表 CREATE TABLE TableName ( Column1 DataType1, Column2 DataType2, ... ); 删除表 DROP TABLE TableName; 2. 数据操作 插入数据 INSERT INTO TableNam…...

基于SpringBoot+Vue+MySQL的考研互助交流平台

系统展示 用户前台界面 管理员后台界面 系统背景 本文设计并实现了一个基于SpringBoot、Vue.js和MySQL的考研互助交流平台。该平台旨在为广大考研学子提供一个集资源共享、学习交流、经验分享、心理辅导等功能于一体的综合性在线社区。通过SpringBoot构建高效稳定的后端服务&am…...

chatgpt个人版ssrf漏洞

文章目录 免责申明搜索语法漏洞描述漏洞复现修复建议 免责申明 本文章仅供学习与交流,请勿用于非法用途,均由使用者本人负责,文章作者不为此承担任何责任 搜索语法 fofa title"ChatGPT个人专用版"漏洞描述 该系统是一个开源的…...

如何查看微信聊天记录?四种实用方法查询微信聊天记录,赶快码住!

微信作为我们日常生活中不可或缺的社交工具,记录了大量的聊天内容和重要信息。 当需要查看或恢复微信聊天记录时,很多人可能不知道如何快速、安全地进行操作。 今天,我们就来介绍四种实用的微信聊天记录查询方法,帮助你有效查看微…...

钢材表面缺陷数据集以coco格式做好了数据集的划分,1200张训练集,600张验证集,对应的json文件也在里面

钢材表面缺陷数据集 以coco格式做好了数据集的划分,1200张训练集,600张验证集,对应的json文件也在里面。 钢材表面缺陷检测数据集营销介绍 项目背景: 钢材作为工业生产的重要原材料之一,其表面质量直接影响到成品的性…...

【Lua坑】Lua协程coroutine无法正常完整执行问题

问题:发现Lua协程执行到一半,突然被掐断了一样等到了设定的时间没有正常执行协程后续代码!非必现bug,若发生大概率在高频率使用协程时易触发。 LuaFramework或xLua uLua都自带有协程coroutine,而且基本都使用对象池缓…...

istio中serviceentry结合egressgateway的使用

假设有一个外部服务,外部服务ip为:10.10.102.90,其中32033为v1版本,32034为v2版本。 现在需要把这个服务引入到istio中,并且需要配置所有访问该服务的流量都通过egressgateway转发出去。 serviceentry apiVersion: n…...

使用 Python 实现 Windows 应用图标的便捷生成:一站式 PNG 转 ICO 工具20240918

使用 Python 实现 Windows 应用图标的便捷生成:一站式 PNG 转 ICO 工具 在开发 Windows 桌面应用程序时,图标文件(ICO)的生成是不可忽视的关键步骤。无论是任务栏图标、快捷方式,还是应用程序的主图标,都需…...

编程环境常用命令合集

cmd: python 进入python运行环境 exit()/quit()/ctrlZ 退出环境 rmdir /s venv 删除环境 pip命令&#xff1a; pip list 查看所有库 pip install <库> 安装库 -i <数据源>可指定安装数据源 pip install <库>x.x.x 安装指定版本的库 pip install --upgrade &…...