知识复习:正则表达式

正则表达式是一种强大的文本匹配工具,它用于检索、替换那些符合某种模式(规则)的文本。 基本匹配 文字:最简单的正则表达式是普通的字符,如 a、b、1 等,它们会匹配文本中的相应字符。 特殊字符 .:匹配除换行符以外的任意单个字符。例如,a.b 可以匹配 acb、aab、a2b 等。 ^:匹配行的开头。例如,^a 会匹配以 a 开头的行。 $:匹配行的结尾。例如,a$ 会匹配以 a 结尾的行。 [ ]:匹配方括号内的任意字符。例如,[abc] 会匹配 a、b、或 c。 -:在方括号内使用时,表示字符范围。例如,[a-z] 匹配任何小写字母。 [^ ]:匹配不在方括号内的任意字符。例如,[^abc] 会匹配除 a、b、c 之外的任意字符。 重复 *:匹配前面的字符零次或多次。例如,a* 会匹配 ''、a、aa、aaa 等。 +:匹配前面的字符一次或多次。例如,a+ 会匹配 a、aa、aaa 等,但不会匹配 ''。 ?:匹配前面的字符零次或一次。例如,a? 会匹配 '' 和 a。 {n}:匹配前面的字符恰好 n 次。例如,a{3} 会匹配 aaa。 {n,}:匹配前面的字符至少 n 次。例如,a{2,} 会匹配 aa、aaa 等。 {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。例如,a{2,4} 会匹配 aa、aaa、aaaa。 特殊字符类 \d:匹配任何数字,等价于 [0-9]。 \w:匹配任何字母数字字符,等价于 [a-zA-Z0-9_]。 \s:匹配任何空白字符,包括空格、制表符、换行符等。 分组和引用 ( ):将括号内的表达式定义为“组”(group),并按照顺序编号。可以使用 \数字 引用这些组。 或操作 |:匹配前后任意一个表达式。例如,a|b 会匹配 a 或 b。 实例应用 假设我们想匹配一个简单的日期格式 yyyy-mm-dd:...

March 30, 2024 · 1 min · 90 words · sirius1y

人工智能期末复习

基本概念 语义角色 指有关语言成分在语句所表达的事件中所扮演的参与者角色 在自然语言处理中对自然语言进行划分处理称为各个语义角色,其中每个语义角色相互依赖,相互关联 常见的语义角色类型有:施事、受事、与事、工具、方式、时间、处所、结果、目的、原因等 例如对于语句:小明昨天晚上在公园遇到了小红 就可以分为Agent、Time、Location、Predicate、Patient等角色 语义角色从一开始的6个扩充到了现在的13个,依据是美国语言学家查理斯·费尔莫尔提出的“格语法” 机器学习 让计算机能够像人一样自动获取新知识,并且在实践中不断完善自我和增强能力 启发函数&估值函数 启发函数:对当前结点到大目标结点未来可能需要付出的代价的估计 对于同一个问题,可能有不同的启发函数,不同的启发函数带来的效果良莠不齐,而各个节点的代价函数是统一确定的,因此选择和优化启发函数是至关重要的 估值函数:为了防止在单独利用启发函数的时候误入歧途,会将启发函数和代价函数结合生成估值函数;即初始结点到达结点x处已经付出的代价与结点x到达目标结点的接近程度估计值的总和 语义标注 在NLP领域中对于自然语言进行分割,并且对每个部分都判断是什么类型的语义角色 语义角色标注是一种浅层的语义分析技术,它只标注谓词(谓语动词、名词、形容词)的语义角色 例如: 昨天张三在家吃苹果。 谓语动词“吃”的语义角色有:施事-张三,受事-苹果,时间-昨天,处所-家 博弈树 将双人完备的信息博弈过程用图表示出来,能得到一颗与或树,称为博弈树 在博弈树中,下一步该MAX走步的结点称为MAX结点;下一步该MIN走步的结点称为MIN结点 博弈树特点: 初始状态为初始结点 博弈树中的或结点和与结点是逐层交替出现的 整个博弈过程都是站在某一方的立场上,所有能使自己获胜的都是本源问题,相应的结点都是可解结点;所有会使对方获胜的结点都是不可解结点 博弈树采用变对子结点进行估值函数计算,再扩展结点的方法,使用的是极大极小化分析,因此引申出了阿尔法-贝塔剪枝 阿尔法-贝塔剪枝: 阿尔法剪枝: 对于一个MIN结点,如果能够推导出其上确界b,并且b不大于MIN结点的父节点下确界a(即a >= b),则不必再扩展MIN结点的其他子结点了,剪枝即可 贝塔剪枝: 对于一个MAX结点,如果能够推导出其下确界a,并且a不小于MAX结点的父节点上确界b(即a >= b),则不必再扩展MAX结点的其他子结点了,剪枝即可 专家系统 专家系统的概念: 专家系统是一种智能的计算机程序,它运用知识和推理来解决只有专家才能解决的复杂问题 专家系统的组成: 专家—-知识库—-推理机—-系统用户 专家系统的特点: 有专家水平的专业知识、能进行有效的推理、启发性、灵活性、透明性、交互性 知识库与推理机分离、具有解释功能 专家系统的类型: 按照解决类型划分:解释、诊断、预测、设计、规划、控制…… 按照应用类型划分:化学、电子学、地质学…… 按照系统体系结构划分:集中式、分布式、云计算 按照知识表示形式划分:基于规则、基于一阶谓词、基于框架、基于语义网 按照采用技术划分:符号推断、神经网络 专家系统实例: 医学专家系统——MYCIN 系统使用INTER LISP语言编写 推理策略:反向推理、深度优先的搜索 地质勘探专家系统——PROSPECTOR 推理方式:似然推理、逻辑推理、上下文推理 希望树 在启发式搜索与或树的过程中,有希望成为最优解树的部分结点所组成的树 定义如下: 初始结点S0一定在希望树中 如果结点x在希望树中,则一定有: 如果x是具有子结点的或结点,则其具有最小代价的子结点一定在希望树中 如果x是具有子结点的与结点,则其全部子结点都在希望树中 与或树的有序搜索过程本质上是寻找希望树的过程,因此随着搜索深度的增加,希望树也会随之变化 Agent Agent的概念: 一种能够在一定环境中自主运行和自主交互,以满足其设计目标的计算实体 按照属性区分Agent:...

November 9, 2023 · 2 min · 286 words · sirius1y

操作系统学习笔记

操作系统 第一章 计算机系统概述 1.1 操作系统 1.1.1 操作系统的概念和功能 概念 操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。 功能和目标 ①操作系统是系统资源的管理者 ②向上层提供方便易用的服务 封装思想:操作系统把一些丑陋的硬件功能封装成简单易用的服务,使用户能更方便地使用计算机,用户无需关心底层硬件的原理,只需要对操作系统发出命令即可。 GUI:图形化用户接口(Graphical User Interface) 用户可以使用形象的图形界面进行操作,而不再需要记忆复杂的命令、参数。 例子:在Windows 操作系统中,删除一个文件只需要把文件“拖拽”到回收站即可。 联机命令接口=交互式命令接口:用户说一句,系统跟着做一句 脱机命令接口=批处理命令接口:用户说一堆,系统跟着做一堆 程序接口:可以在程序中进行系统调用来使用程序接口。普通用户不能直接使用程序接口,只能通过程序代码间接使用。 如:写C语言“Hello world”程序时,在printf 函数的底层就使用到了操作系统提供的显式相关的“系统调用” ③是最接近硬件的一层软件 需要实现对硬件机器的拓展 没有任何软件支持的计算机称为裸机。在裸机上安装的操作系统, 可以提供资源管理功能和方便用户的服务功能,将裸机改造成功能 更强、使用更方便的机器 通常把覆盖了软件的机器成为扩充机器,又称之为虚拟机 1.1.2 操作系统的特征 基本特征 并发、共享、虚拟、异步 并发 两个或者多个事件在同一时间间隔内发生 使得系统具有处理和调度多个程序同时执行的能力 操作系统的并发是通过分时实现的 注意:并发是指在一个时间段并行是指在同一个时刻并行是指系统具有同时执行或操作(硬件支持:多流水线或者多处理机) 重要考点 单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行 多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行 共享 互斥共享方式 例如打印机、磁带,同一时刻只能供一个进程对资源进行访问 这种资源称作:临界资源或者独占资源 同时访问方式 一段时间内允许多个进程对资源进行访问 典型代表:磁盘设备重入码编写的文件 虚拟 一个物理上的实体变为若干逻辑上的对应物,这种技术也被称为虚拟技术 虚拟处理器:采用多道程序并发的方式,让每个终端用户感觉到有多个处理器 时分复用技术 虚拟存储器:将物理存储变为虚拟存储器,逻辑上扩充存储器用 空分复用技术 也可以将一台IO设备虚拟为多台逻辑上的IO设备,并允许每个用户占用一台逻辑上的IO设备 异步 在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的, 多道程序走走停停,进程以不可预知的速度向前进 并发和共享的关系 并发性指计算机系统中同时存在着多个运行着的程序。 共享性是指系统中的资源可供内存中多个并发执行的进程共同使用。 互为存在条件 并发和虚拟的关系 如果失去了并发性,则一个时间段内系统中只需运行一道程序,那么就失去了实现虚拟性的意义了。因此,没有并发性,就谈不上虚拟性 并发和异步的关系 只有系统拥有并发性,才有可能导致异步性。...

November 9, 2023 · 7 min · 1371 words · sirius1y

Go log库,encoding/json

log Go语言内置的log包实现了简单的日志服务。本文介绍了标准库log的基本使用。 Go内置的log库功能有限,例如无法满足记录不同级别日志的情况,我们在实际的项目中根据自己的需要选择使用第三方的日志库,如logrus、zap等。 使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln)来使用,比自行创建一个logger对象更容易使用。 例如,我们可以像下面的代码一样直接通过log包来调用上面提到的方法,默认它们会将日志信息打印到终端界面: package main import ( &quot;log&quot; ) func main() { log.Println(&quot;这是一条很普通的日志。&quot;) v := &quot;很普通的&quot; log.Printf(&quot;这是一条%s日志。\n&quot;, v) log.Fatalln(&quot;这是一条会触发fatal的日志。&quot;) log.Panicln(&quot;这是一条会触发panic的日志。&quot;) } 编译并执行上面的代码会得到如下输出: 2017/06/19 14:04:17 这是一条很普通的日志。 2017/06/19 14:04:17 这是一条很普通的日志。 2017/06/19 14:04:17 这是一条会触发fatal的日志。 logger会打印每条日志信息的日期、时间,默认输出到系统的标准错误。Fatal系列函数会在写入日志信息后调用os.Exit(1)。Panic系列函数会在写入日志信息后panic。 配置logger 标准logger的配置 默认情况下的logger只会提供日志的时间信息,但是很多情况下我们希望得到更多信息,比如记录该日志的文件名和行号等。log标准库中为我们提供了定制这些设置的方法。 log标准库中的Flags函数会返回标准logger的输出配置,而SetFlags函数用来设置标准logger的输出配置。 func Flags() int func SetFlags(flag int) flag选项 log标准库提供了如下的flag选项,它们是一系列定义好的常量。 const ( // 控制输出日志信息的细节,不能控制输出的顺序和格式。 // 输出的日志在每一项后会有一个冒号分隔:例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message Ldate = 1 << iota // 日期:2009/01/23 Ltime // 时间:01:23:23 Lmicroseconds // 微秒级别的时间:01:23:23.123123(用于增强Ltime位) Llongfile // 文件全路径名+行号: /a/b/c/d....

June 22, 2023 · 2 min · 332 words · sirius1y

数据结构学习笔记

一、绪论 数据(data)是信息的载体,是描述客观事物的数、字符、图形、图像、声音以及所有能输入计算机中并被计算机程序识别和处理的符号的集合。 数据的最小单位的是数据项; 数据的基本单位是数据元素,一个数据元素可由若干个数据项组成。 数据结构分为两大类:线性结构和非线性结构 两类结构通常分为四类基本结构: 1)集合:结构中的数据元素之间同属于一个集合,此外没有其他关系; 2)线性结构:结构中的数据元素之间存在一种线性关系,一对一的关系; 3)树形结构:一对多的关系; 4)图形结构或网状结构:多对多的关系。 根据视点的不同又可分为:逻辑结构和物理结构: 逻辑结构:面向问题,描述数据元素之间的逻辑关系; 物理结构:又称存储结构,面向计算机,是数据结构在计算机中的表示(映像) 算法的特性:输入性、输出性、确定性、有穷性、有效性(可行性) 算法的标准:正确性(满足所要求界的问题的需求,最重要最基本)、可用性(便于用户使用,良好的界面、完备的用户文档)、可读性(易于理解)、效率(存储单元的开销和运行时间的耗费)、健壮性(对于非法数据的处理) 算法复杂度:(渐进)时间复杂度和空间复杂度 二、线性结构 1、线性表 1.1 顺序表示:顺序表 用顺序结构存储的线性表为顺序表(sequential list)。 顺序表一般用数组进行存储 类模板定义:T* elems,int length,int maxLength 1.2 链表表示 1) 单链表 分为带头结点和不带头结点的单链表; 带头结点的单链表相对不带头结点的单链表在涉及会更改头节点的任务时,操作会更加统一。 类模板定义: (结点)T data,Node* next (单链表)Node* head,int length 2) 双向循环链表 类模板定义: (结点)T data,Node* prior,Node* next (双向循环链表)Node* head,int length *带头结点的双向循环列表只有一个元素结点的条件:head->next!=head && head->next->next==head 3) 静态链表 利用数组来模拟存储空间实现链表。 类模板定义: (结点)T data,Node* next (静态链表)Node* head,Node* avail 设数组a放置了一个静态链表,当链表未使用的时候,其中所有的结点都是形成了一个链表,用avail进行管理,代表未使用的结点。 当进行插入操作的时候,就从avail中取出一个头节点,进行赋值,再放入head链表之中。 在完成每一步操作之后,记得要将next域中更改 插入元素操作: i=avail; avail=a[avail].next; a[i].next=a[head],next; a[head]。next=i; 当需要释放由j所指向的结点时,只需要把结点j放到avail表的最前端,并让avail指向它即可。...

October 26, 2022 · 19 min · 3943 words · sirius1y