当前位置: 首页 > 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:访问队列中的…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...

Go 语言中的内置运算符

1. 算术运算符 注意: (自增)和--(自减)在 Go 语言中是单独的语句,并不是运算符。 package mainimport "fmt"func main() {fmt.Println("103", 103) // 13fmt.Println("10-3…...

MySQL用户远程访问权限设置

mysql相关指令 一. MySQL给用户添加远程访问权限1. 创建或者修改用户权限方法一:创建用户并授予远程访问权限方法二:修改现有用户的访问限制方法三:授予特定数据库的特定权限 2. 修改 MySQL 配置文件3. 安全最佳实践4. 测试远程连接5. 撤销权…...