java 正则表达式 替换字符串img标签的路径_正则表达式和有限自动机的应用

91b300f1b17357348cb69332be9823e2.png

1. 为什么谈有限自动机时要谈正则表达式?原因是:正则表达式所匹配的所有字符串所构成的语言可以用有限自动机识别。根本原因是:正则集(正则表达式所匹配的所有字符串集合)是由右线性文法(3型文法)所产生的语言,两者是等同的。

2. 单词拼写检查

有限自动机除了可以匹配正则表达式描述的字符集(语言),也可以用来做单词拼写检查。当然还是要基于字符变化距离度量来提供候选串的。具体操作就是:

设T为字母表,可构造一个识别字母表T上的字母构成的所有合法单词的有限自动机。该自动机对应的状态转换图可看作是一个边上有字母标记的有向图。那么,字母表T上的字母构成的所有合法单词都对应着有限自动机中的一条从初始状态到终止状态的路径。字符串识别的过程就是对有向图从初始状态到终止状态遍历的过程,一条路径从初始状态到终止状态经过的所有弧上的字母连接起来构成一个字符串。给定一个字符串,对其进行拼写检查的过程实际上是在给定阈值t(t>0)的范围内,寻找那些与输入串的编辑距离小于t的路径,这些路径从初始状态到终止状态经过的所有弧上的字母连接起来构成的字符串,就是要找的与输入串最相似的单词。

自动机的实现,按照何晗的文章

https://www.hankcs.com/nlp/%E7%AC%AC3%E7%AB%A0-%E5%BD%A2%E5%BC%8F%E8%AF%AD%E8%A8%80%E4%B8%8E%E8%87%AA%E5%8A%A8%E6%9C%BA.html​www.hankcs.com

所述,关于有限自动机找出正确字串,修改图的深度优先搜索算法即可,弄个stack,注意剪枝就行。

编辑距离指的是Damerau所定义的编辑距离,即两个字符串之间的编辑距离等于使一个字符串变成另一个字符串而进行的插入、删除、替换或相邻字符交换位置而进行操作的最少次数。编辑距离可以参考何晗搜集整理的

https://www.hankcs.com/program/java/several-string-edit-distance-achieved.html​www.hankcs.com

我之前找到过一个Python版本的,但是那时候没有写知乎,又不知道哪去了。什么语言不重要,知道实现过程比较重要,怎么优化不重要,因为没见过会优化的。

基于有限自动机的单词拼写检查完整实现,没有找到合适的代码,有关拼写检查的仓库有:

  • https://github.com/hunspell/hunspell star最多的一个拼写检查
  • https://github.com/jmoy/norvig-spell norvig拼写检查的各种编程语言实现
  • https://github.com/barrust/pyspellchecker norvig拼写检查的纯Python实现
  • https://github.com/bakwc/JamSpell

有关于拼写检查这个事,有时间再写其他文章说。写形式语言自动机主要就是为了补上2型上下文无关文法以及对应的下推自动机。

3.grep命令

虽然说操作机器是最没脑子的技术,但是还是把它弄熟,然后再狠狠地鄙视,跟导数据一样,一个月开200块钱都多,就是个女工接线头。

$ cat kkk
akkk
test file
oooo
ppppp# 在文件kkk中搜索匹配字符串"test file"
$ grep "test file" kkk
test file# 在文件kkk中搜索匹配字符串"es",并且加上行号输出
$ grep -n es kkk
2:test file# 显示所有以d开头的文件中包含"test"的行数据内容
$ cat d1
1
test1
$ cat d2
2
test2
$ grep 'test' d*
d1:test1
d2:test2# 在文件aa中显示所有包含至少有5个连续小写字符的行数据内容
$ cat aa
aaaaa
bbb
AAAAA
BBB
aaaaaa
$ grep -E "[a-z]{5}" aa
aaaaa
aaaaaa# 查找sshd进行信息
# ps -ef|grep sshd
root      3390  3376  0 09:09 pts/2    00:00:00 grep --color=auto sshd# 在aa文件中找出以b开头的行内容
$ grep "^b" aa
bbb# 在kkk文件中输出以le结尾的行内容
$ grep -E "le$" kkk
test file# 在kkk文件中输出包含es或 kk的行内容
$ grep -E "(es)|(kk)" kkk 
akkk
test file

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

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

相关文章

Tomcat应用中post方式传参数长度限制

Tomcat应用中post方式传参数长度限制 jsp页面上是没有限制的&#xff0c;但是在tomcat服务器上有限制&#xff0c;Tomcat 默认的post参数的最大大小为2M&#xff0c; 当超过时将会出错&#xff0c;可以配置maxPostSize参数来改变大小。 <Connector port"8080" red…

14.6 Spring MVC 测试框架(翻译)

14.6 Spring MVC 测试框架&#xff08;每天翻译一点点&#xff09; Spring MVC测试框架对 Spring MVC 代码提供一流的测试支持 &#xff0c;它拥有一个 fluent API ,可以和JUnit, TestNG 或其它任何测试框架协同使用。 此测试框架基于 spring-test 模块的Servlet API mock obje…

html读取本地txt_手机本地电子书籍阅读器 — 静读天下

在早期山寨按键手机流行的年代手机中必装两款软件莫过于Anyview和Opera浏览器了&#xff0c;一个是本地最佳阅读工具另一个是压缩流量访问网页的利器&#xff0c;时过境迁好多人都早以忘记了这些昔日的王者。曾经那帮挑灯夜读看小说的熊孩子都已经长大了&#xff0c;在难得的休…

华为手机丢失定位网站_手机端网站优化要从网站的设计和定位开始入手

移动端网站优化要从网站的设计和定位开始入手&#xff0c;重要的是简洁易用&#xff0c;切忌复杂&#xff0c;令用户搞不明白找不到想用的。对于搜索引擎而言&#xff0c;好的用户访问体验也是排名的最佳标准。下面小编就来分析一下设计对手机端网站优化排名的影响。1、使用规范…

Spring MVC 测试 | 模拟提交表单

在 Spring 4 MVC 单元测试例子 一文中利用Spring test 框架进行了简单的测试&#xff0c;代码mockMvc.perform(get("/SayHello/getAnswer"))使用get&#xff08;&#xff09;方法发送了一个GET请求。 现在需求变了&#xff0c;需要提交一个表单&#xff0c;该如何实…

安卓接受后台数据转换解析出错_安卓手机内存越大,速度就会越快?

与非网 2 月 18 日讯&#xff0c;现在安卓手机的内存在产品规划上越来越大&#xff0c;2020 年发布的旗舰手机运行内存已经拓展到惊人的 10GB 以上&#xff0c;而这个运存大小已经超过笔记本主流的 8GB 内存&#xff0c;手机到底需要这么大的内存吗&#xff1f;安卓手机的内存为…

Spring MVC搭建REST风格网站

REST是表述性状态转移的意思。REST核心是以资源为中心。 比如&#xff0c;URI是统一资源标识符&#xff0c;URL是一种URI&#xff0c;称为统一资源定位符。现在很多网站设计的URL,没有以资源为中心&#xff0c;没有体现URI的标识本质。比如&#xff0c;有一个URL&#xff1a;/…

usb

http://blog.csdn.net/jhqin/article/details/6734673 http://www.cnblogs.com/ceachy/archive/2013/03/22/WMI_Usage.html 转载于:https://www.cnblogs.com/answercard/p/5839013.html

ipv6地址格式_IPV6与IPV4的差异

ipv6相比&#xff0c;我们现在的IPV4,有什么优势&#xff0c;有什么差异IPv6的路由表更小,IPv6的组播支持以及对流的支持增强,IPv6加入了对自动配置的支持,IPv6具有更高的安全性. 与IPV4相比&#xff0c;IPV6具有以下几个优势&#xff1a;IPv6具有更大的地址空间。IPv4中规定IP…

@Autowired和构造方法执行的顺序解析

先看一段代码&#xff0c;下面的代码能运行成功吗&#xff1f; Autowiredprivate User user;private String school;public UserAccountServiceImpl(){this.school user.getSchool();} 答案是不能。因为Java类会先执行构造方法&#xff0c;然后再给注解了Autowired 的user注入…

SVN查看提交日志的命令

Windows下&#xff0c;使用svn客户端查看日志很方便&#xff0c;但是如果在linux下&#xff0c;常规查看日志的命令对于日志记录数比较多的时候&#xff0c;屏幕显示不了&#xff0c;就比较麻烦&#xff0c;后来发现了一个很有用的参数可以限制要查看的记录条数 查看某个目录下…

python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2

python访问PostgreSQL数据库之连接库Psycopg2作者&#xff1a;佣工7001由于要在python访问PostgreSQL数据库&#xff0c;需要一个符合DB-API的连接库。通过搜索&#xff0c;锁定两个候选库&#xff1a;一个是py-postgresql&#xff0c;一个是Psycopg2。简单的看了一下py-postgr…

[LeetCode]160. Intersection of Two Linked Lists

题目&#xff1a; Write a program to find the node at which the intersection of two singly linked lists begins. For example, the following two linked lists: A: a1 → a2↘c1 → c2 → c3↗ B: b1 → b2 → b3 判断两个链表是否相交&#x…

MongoClient类参考文档

&#xff08;MongoClient类的实例是&#xff09;一个带有内部连接池的MongoDB客户端。对绝大部分应用来说&#xff0c;都应该有一个MongoClient实例&#xff08;不知怎翻译&#xff09;。 下面各种创建实例的方法是等效的&#xff0c;并且全部都通过默认端口连到本地数据库的&…

反序列化对象列表发生异常_通过反序列化漏洞,黑客能做什么呢?

在之前的文章中讲解了一个反序列化的例子&#xff0c;我们已经知道&#xff0c;通过反序列化漏洞&#xff0c;黑客可以调用到Runtime.exec()来进行命令执行。换一句话说&#xff0c;黑客已经能够在服务器上执行任意的命令&#xff0c;这就相当于间接掌控了你的服务器&#xff0…

nodeJS理解

nodejs是一个基于Chrome V8 引擎的JS运行环境&#xff0c;也就是让javascript运行在服务器&#xff08;server&#xff09;端&#xff0c; NodeJS使用了一个事件驱动&#xff0c;非阻塞式的I/O模型&#xff0c;使得其轻量又高效。 Nodejs包管理器npm是全球最大的开源生态系统。…

pythonwhile输出每一个余数_Python 基础 - day02-3

Python 基础 - day02-3循环目标程序的三大流程while 循环基本使用break 和 continuewhile 循环嵌套01. 程序的三大流程在程序开发中, 一共有三种流程方式:顺序 -- 从上向下, 顺序执行代码分支 -- 根据条件判断, 决定执行代码的 分支循环 -- 让 特定代码 重复 执行02. while 循环…

Spring MVC表单验证

看登录控制器代码&#xff1a; RequestMapping(methodRequestMethod.POST,path"/login")public void login(Validated UserEntity user,BindingResult result,HttpServletResponse response) throws BindException{if(result.hasErrors()){response.setHeader("…

小程序开发语言python_小程序是用什么语言开发的?5种最佳语言分享

你应该学习哪种编程语言来探索AI的深度&#xff1f;当然&#xff0c;你会需要一个拥有许多优秀机器学习和深度学习库的语言。它还应具有良好的运行时性能&#xff0c;良好的工具支持&#xff0c;大量程序员社区以及健康的支持包生态系统。这仍然留下了很多不错的选择。下面是我…

tcl之内容

转载于:https://www.cnblogs.com/chip/p/5847126.html