许式伟的架构课
许式伟
七牛云 CEO
84946 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 89 讲
许式伟的架构课
15
15
1.0x
00:00/00:00
登录|注册

65 | 架构范式:文本处理

BPL(Binary Processing Language)
序列化机制
正则表达式(Regular Expression)
TPL(Text Processing Language)
词法分析(Lex)和语法分析(Parser)
七牛云的 Go 语言技术栈
C++ 版本的 TPL
KSDN
mk 程序
ExcelViewer 和 DocViewer
网络协议解析
编程语言的编译器
Office 软件
网络爬虫与搜索引擎
编译器(Compiler)
数据抽取(Data Extraction)
数据验证(Data Validation)
二进制内容的处理范式
文本内容的处理范式
文本处理技术栈演进
文本处理的需求场景
文本处理是指对非结构化数据的处理过程
架构师的武器库是不断完善的架构范式
架构范式:文本处理

该思维导图由 AI 生成,仅供参考

你好,我是七牛云许式伟。
上一讲 “64 | 不断完善的架构范式” 我们提到架构师的武器库是不断完善的架构范式。今天我们围绕一个具体的问题域,看看我们日常能够积累什么样的经验和成果,来完善作为一个架构师的知识体系。
我们选择的问题是 “文本处理”。
计算机之所以叫计算机,是因为计算机的能力基本上就是“计算 +I/O”两部分。I/O 只是为了让计算机与物理世界打交道,它也是为计算服务的。所以数据是软件的灵魂,数据处理是软件的能力。
今天我们聊的文本处理,不是通用的数据处理能力,而是收敛在数据的 I/O 上。这里说的文本,是指写入到磁盘的非结构化数据。它可能真的是文本内容,比如 HTML 文档、CSS 文档;也可能是二进制内容,比如 Word 文档、Excel 文档。文本处理则是指对这类非结构化数据的处理过程,常见文本处理的需求场景有:
数据验证(Data Validation)。比如判断用户输入的文本是否合法,值的范围是否符合期望。
数据抽取(Data Extraction)。比如从某 HTML 页面中抽取出结构化的机票信息(什么时间,从哪里出发,到哪里去,价格几何等等)。
编译器(Compiler)。特殊地,在文本格式是某种语言的代码时,我们可以将文本编译成可执行的机器码,或虚拟机解释执行的字节码。当然我们也可以边解释文本的语义边执行。
……
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了作者在文本处理领域的技术演进历程,从金山实习时的文件格式设计和读写任务,到不同项目中的文本处理技术的演进,以及C++版本的TPL和Go语言版本TPL的诞生,以及BPL的创建。文章重点讨论了词法分析和语法分析的两个阶段,以及TPL实现的通用的Scanner + Parser机制。此外,文章还介绍了正则表达式在文本内容处理中的应用。总的来说,本文展示了作者在文本处理领域的丰富经验和技术成果,对于从事文本处理相关工作的技术人员具有一定的借鉴意义。 文章还讨论了二进制内容的通用处理范式,探讨了序列化机制和其在C++和Go语言中的应用。作者指出了序列化机制的过度设计,强调了在文件I/O的序列化机制中,严谨的数据格式定义比提供智能更为重要。此外,文章还介绍了BPL的设计思想和功能,展示了其与MongoDB官方采用的伪代码的一致性。最后,作者呼吁读者在工作中有意识地分析业务场景,提炼通用的需求场景形成架构范式的积累,以便更好地进行架构的正交分解,使业务迭代变得更加容易。 总的来说,本文内容丰富,涵盖了文本处理和二进制内容处理的多个方面,展示了作者在技术领域的深厚造诣和丰富经验,对于从事相关工作的技术人员具有一定的借鉴意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《许式伟的架构课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • 沫沫(美丽人生)
    许老师好 ,如果有两个服务A和B,A依赖于B,同时B也依赖于A,出现这种情况是属于循环依赖吗?这种情况的出现,是业务的正交分解没有做好吗?如果系统中出现大量的这种依赖,感觉系统的调用就成了复杂的网络结构 这种情况,重构应该怎么做呢?盼复!

    作者回复: 循环依赖是从源代码层面的,不是运行时的网络调用。所以你说的不属于循环依赖。但如果大量存在两个服务之间的相互调用,解耦肯定也是没做好。高内聚低耦合,从功能内聚性看边界划分

    2019-12-17
    2
    7
  • Aaron Cheung
    可运行的系统做重构 需要耗费不少时间 更需要团队支持😂

    作者回复: 首先团队要有重构价值的共识,找到重构的步骤,然后才是执行。下一讲我们就是谈重构。

    2019-12-17
    2
  • leslie
    "数据是软件的灵魂,文件是软件最重要的资产。"老师这话很经典:故而之前老师讲数据库时提出的是"中间件存储"时,通过大量的查阅资料和总结研究找到另外一个称呼"数据系统"。 从硬件层考虑"中间件存储"就是资产,软件层考虑“数据系统”就是灵魂。说个真实的案例,前段时间一个DB圈子的朋友数据库出问题,软件层各种排查做尽就是没看到问题,后来问题就处在硬件的存储。朋友问题处理完告诉我问题时我就猜测其硬件端的问题,我说你肯定是硬件的许多问题没考虑;朋友反问我为何知道,我告诉他我有5年以上核心机房的运维经验-这段经验帮助了我当问题出现时会从软硬件两方面去思考和找寻问题。 这个案例体现了老师所说的"数据是软件的灵魂,文件是软件最重要的资产。":当我们更高的角度和维度去思考时绕着这个核心其实就更加明白其价值、意义和处理方式。感谢老师今天的分享,跟随老师的教诲在学习中进步和成长,期待老师后续的分享。
    2019-12-17
    7
  • candy
    这篇没太看懂,编译原理需要好好学
    2021-09-02
    3
  • ifelse
    学习打卡
    2023-10-08归属地:浙江
  • 木木
    厉害,顺手实现了一个语言。这篇评论怎么这么少。
    2021-08-16
  • 王建新
    人对现实世界的原物进行信息化管理,大致有几个阶段过程:1,将现实原物加工成信息原料 比如形成思想语言或文章图画等 2,将信息原料存储 过去存储在大脑里纸上现在存储在电脑里 电脑里存成文本文档或富媒体 3,人以自身价值取向定义原料对应原物价值的特征值 结构化数据或人脸特征或嗓音特征 4,将特征值存储 结构化数据存在结构化表格或表格库里 以前是纸上画表现在是电脑里用结构化数据库 但图像或语音的特征值过去无法抽象出数字化的特征值 只能将数字富媒体原料存储在电脑里 5,在需要的时候获取第一原料特征值或群里原料特征值 结构化数据本身就是特征值存储,便于读取。而富媒体存储的是数字化原料,现在有了人工智能算法比对特征值 可以人类定义训练后找到某个原料中的特征值。 因为存的是富媒体文件,所以要先定位找到合适的富媒体原料文件,这就是非结构化数据文件管理。找到文件后或找文件的过程中,通过人工智能确定目标特征值所在的富媒体文件。另外,搜索引擎也是这个情况,即特征值预先完全没有抽象和存储在电脑里,只不过过去主要针对文本文件。非常感谢许大的文章,让我想到了上面内容。
    2020-11-13
    1
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部