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

news2024/9/21 23:13:51

我们需要一种模式匹配算法,该算法可以识别与模式匹配的字符序列或词序列,以便从较长的文本字符串中“提取”它们。构建这种模式匹配算法的简单方法是在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中派上用场。计算机可以通过两种方式使用形式语法:

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2144478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决Gson将长数字( json字符串)转换为科学记数法格式

Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。 依赖 Gradle: dependencies {implementation com.google.code.gson:gson:2.11.0 }…

为什么制造业要上MES,有哪些不得不上的理由吗?

关于为什么制造业要上MES,以及有哪些不得不上的理由吗?以下分为三个部分给大家详细讲解。 一、MES是什么? MES是一个综合性系统,连接企业的ERP系统与生产现场操作层面。它通过实时数据采集、分析和监控,将计划与执行紧…

精准营销,高效获客:Xinstall如何为App增长赋能?

在移动互联网时代,App的推广和运营面临着前所未有的挑战。如何在海量用户中精准定位目标客户?如何实时追踪用户行为,优化推广策略?Xinstall作为一站式App全渠道统计服务商,以全渠道数据统计为核心,为App运营…

继承1 2024_9_18

1.继承的基本用法 当需要继承的时候,我们就在派生类的后面加上一个权限父类,这个权限可以是公有,保护和私有,后面就是继承的父类.此时,下面的stu这个派生类,也就可以使用Person里面的方法了. 2.继承基类成员访问方式的变化 当父类被继承到派生类的时候,此时会根据继承方式的不…

Qt 学习第十天:小项目:QListWidget的使用

一、页面布局 二、命名按钮 双击按钮可以修改显示中的文字(例如:改成“全选”),objectName是要改成程序员所熟悉的名字(英文,符合代码规范)方便修改和书写代码,一看就能看懂的 三、…

亚马逊、沃尔玛、敦煌网、Target塔吉特、Temu环境搭建测评技术!

海外跨境电商各大主要平台正不断力推半托管模式,不断对商家开出众多吸引和扶持政策。全托管是指电商平台全面负责店铺的运营,包括仓储、配送、售后等,而商家主要负责提供货品。半托管模式则基本由商家自主经营,平台只负责仓配物流…

Xilinx系FPGA学习笔记(九)DDR3学习

系列文章目录 文章目录 系列文章目录前言DDR介绍DDR的IP核学习接口信号解析读写流程分析AXI 前言 这里暂时先只介绍一下IP核配置生成和一些接口信号的含义,后续还需要补很多知识点和实际测试应用 DDR介绍 DDR3 已不是当今主流的 DDR 存储器,市场上的 …

双天线+ins

使用1: 1、初始v-b 双天线与车固连且平行,双天线的欧拉角得到Cvn, Cnb组合得到,车体与INS之间不平行存在Cvb, 用Cnb*Cvn 得到Cvb initmisali(opt,solbuf,posebuf,ts,te,Cvb)) { 存疑的地方:att 应该清空后再用 否则变成了(A…

TMStarget学习——T1 Segmentation数据处理及解bug

最新学习季公俊老师的神器 TMStarget 的第一个模块基于结构像的靶区计算T1 segmentation。下面上步骤: (1)在github 上下载 TMStarget https://github.com/jigongjun/Neuroimaging-and-Neuromodulation (2)按照要求下载依赖工具软件AFQ、vistasoft、SPM12 &#…

GBase8c主备版500升级步骤

# 升级方式区别 就地升级:升级期间需停止业务进行,一次性升级所有节点。 灰度升级:灰度升级支持全业务操作,也是一次性升级所有节点。 指定节点升级:基于灰度升级,支持升级指定节点,支持部分…

【练习11】大数乘法

链接:大数乘法__牛客网 (nowcoder.com) 算法分析: 1.为什么以字符串的形式输入? 因为读入的数字太大,而字符串没有固定的大小限制。 2.可以采用模拟列竖式做乘法的方式,先无进位相乘再相加,最后处理进位。 …

Java智慧云智能教育平台

技术架构: SpringBoot Mybatis Shiro mysql redis 功能描述: 支持多种题型:选择题、多选题、判断题、填空题、综合题以及数学公式。支持在线考试,教师在线批改试卷。 功能模块:系统首页、教育教学模块、考试管…

第十一章 【后端】商品分类管理微服务(11.3)——商品管理模块 yumi-etms-goods

11.3 商品管理模块 yumi-etms-goods 新建 yumi-etms-goods 模块 添加依赖 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns&#

干货满满!第二期流程挖掘实践训练营圆满落幕~

2023年7月14日&#xff0c;望繁信科技第二期流程挖掘实践训练营在上海圆满结束&#xff01;此次训练营以实战为导向&#xff0c;为大家提供了一个深入学习流程挖掘知识和技巧的专业交流平台&#xff0c;得到了广大学员们的一致好评。 产品大咖面对面 作为本次训练营的亮点环节…

一次渲染十万条数据:前端技术优化(上)

今天看了一篇文章&#xff0c;写的是一次性渲染十万条数据的方法&#xff0c;本文内容是对这篇文章的学习总结&#xff0c;以及知识点补充。 在现代Web应用中&#xff0c;前端经常需要处理大量的数据展示&#xff0c;例如用户评论、商品列表等。直接渲染大量数据会导致浏览器性…

PMP出成绩非常慢?PDU如何获取?

1、PMP项目管理认证考试后6-8周才公布成绩 2、非一次性发布&#xff0c;从第一个人成绩公布到最后一个公布结束持续一周左右时间 3、PMP每年会考4次&#xff08;3月、5月、8月、11月&#xff09; 4、组织方为美国 5、报名费3900&#xff0c;补考费2500 PMP考试成绩查询方式…

新任项目经理,如何快速接手项目

新任项目经理踏上管理岗位&#xff0c;面临着前所未有的挑战与机遇。如何快速适应角色&#xff0c;有效管理团队&#xff0c;确保项目顺利推进&#xff0c;是每一位新任项目经理必须面对的。 一、深入了解项目与团队 1、项目定位与规划 新任项目经理应对项目进行全面的调研与…

7款实用电脑办公软件和网站,工作效率飞跃提升

4款软件3个网站&#xff0c;电脑里一定要有这7款实用办公工具&#xff0c;提升效率杠杠滴&#xff0c;用过以后就离不开了&#xff01; 1、Free Download Manager 一个免费的下载神器&#xff0c;不仅界面简洁&#xff0c;还没广告。能设置下载计划&#xff0c;多线程下载&am…

让3000年都无人能识的伪二重直线段一下子浮出水面推翻百年集论

黄小宁 公元前1100年中国人商高同周公的一段对话谈到了勾股定理说明人类认识几何学的直线段起码已有3000多年。 直线可由无穷多直线段连接而成。直线段可均匀收缩变短。长为2的长条形弹簧W&#xff08;可二等分&#xff09;被压缩变短成长为1的弹簧b&#xff0c;b不是W的一半。…

yolov8区域入侵检测警报系统-pyside6可视化界面

yolov8区域入侵检测警报系统&#xff0c;是微智启软件工作室基于yolov8目标追踪和pyside6开发&#xff0c;在window的pycharm或者vscode里运行&#xff0c;可以应用于多个领域&#xff0c;检测统计物体个数以及入侵语音警报。 功能介绍 可以应用于 江河流域危险区域禁止游泳警…