【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请求:…...
直播开播极速流,如何有效接入?
如何有效接入开播极速流?为什么你的直播流速会逐渐下降?开播极速流实际上是我们流速的巅峰阶段,这一阶段的流量构成通常是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:访问队列中的…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
