什么是数据解析?

May-30-20215 分钟阅读

数据解析是在处理大量数据时经常会遇到的一个术语,尤其是对于那些从网络上抓取数据的人和软件工程师来说。然而,数据解析是一个需要深入讨论的话题。例如,究竟什么是数据解析,以及如何进行数据解析。

数据解析是在处理大量数据时经常会遇到的一个术语,尤其是对于那些从网络上抓取数据的人和软件工程师来说。然而,数据解析是一个需要深入讨论的话题。例如,究竟什么是数据解析,以及如何在现实世界中实现数据解析。

本文将回答上述所有问题,并概述与数据解析相关的重要术语。

解析是什么意思?

当你从网络搜索中提取大量数据时,这些数据都是 HTML 格式的。不幸的是,这种格式对于任何非程序员来说都是不可读的。因此,您必须对数据做进一步处理,使其成为人类可读的格式,方便数据科学家进行分析。解析器在解析过程中承担了大部分繁重的工作。

数据解析器是做什么的?

解析器会将一种格式的数据转换成另一种格式的数据。例如,解析器会将您通过搜刮获得的 HTML 数据转换为 JSON、CSV 甚至表格,使其成为您可以读取和分析的格式。值得一提的是,解析器与任何特定的数据格式无关。

解析器不会解析每个 HTML 字符串,因为好的解析器会将 HTML 标记中的所需数据与其他数据区分开来。

使用解析器的不同技术

如上一节所述,由于解析器并不依赖于某种特定的技术,因此在本质上非常灵活。因此,各种各样的技术都在使用它们:

脚本语言--这些语言无需编译器即可执行,因为它们是根据文件中的一系列命令运行的。典型的例子有 PHP、Python 和 JavaScript。

Java 和其他编程语言--Java 等高级编程语言使用编译器将源代码转换为汇编语言。解析器是这些编译器的重要组成部分,它可以创建源代码的内部表示。

HTML 和 XML--对于 HTML,解析器提取 HTML 标记中的文本,如标题、小标题、段落等。而 XML 解析器是一个库,可以方便地读取和操作 XML 文档。

SQL 和数据库语言--例如,SQL 解析器可解析 SQL 查询并生成 SQL 查询中定义的字段。

建模语言--建模语言中的解析器可让开发人员、分析人员和利益相关者了解所建模系统的结构。

交互式数据语言--用于交互式处理大量数据,包括空间科学和太阳物理学。 

为什么需要数据解析?

需要进行解析的主要原因是,各种实体需要不同格式的数据。因此,解析可以转换数据,使人类或在某些情况下软件能够理解。后者的一个突出例子就是计算机程序。首先,人类用一种高级语言(类似于我们日常使用的英语等自然语言)将程序写成人类可以理解的格式。然后,计算机将其翻译成计算机能够理解的机器级代码。

在两个不同软件之间需要通信的情况下,解析也是必要的--例如,对一个类进行序列化和反序列化。

解析术语和解析器结构

到此为止,您已经了解了数据解析的基本概念。现在是时候探索与数据解析相关的重要概念以及解析器的工作原理了。 

术语

正则表达式

正则表达式是定义特定模式的一系列字符。高级语言和脚本语言最常用正则表达式来验证电子邮件地址或出生日期。虽然正则表达式被认为不适合数据解析,但仍可用于解析简单的输入。之所以会产生这种误解,是因为某些程序员在每项解析任务中都使用正则表达式,即使在不应该使用正则表达式的情况下也是如此。在这种情况下,结果就是将一系列正则表达式拼凑在一起。

您可以使用正则表达式来解析一些简单的编程语言,也称为正则表达式语言。不过,这并不包括 HTML,您可以将其视为一种简单的语言。这是因为在 HTML 标记中,您会遇到任意数量的标记。此外,根据 HTML 的语法,它的递归和嵌套元素也不能归类为常规语言。因此,无论你多么聪明,都无法解析它们。 

语法

语法是一套从句法角度描述语言的规则。因此,它只适用于语法,而不适用于语言的语义。换句话说,语法只适用于语言的结构,而不适用于其意义。让我们来看看下面的例子:

HI:"HI"

名称:[a-zA-z] +

问候语你好,姓名

上述代码的两种可能输出是 "HI SARA "或 "HI Coding"。就语言结构而言,它们都是正确的。但是,在第二个输出中,由于 "Coding "不是人名,因此在语义上是不正确的。

语法剖析

我们可以用常用的形式,如 Backus-Naur 形式(BNF)来解剖语法。这种形式有其变体,即扩展 Backus-Naur 形式,它表示重复。BNF 的另一个变体是 Augmented Backus-Naur Form。它用于描述双向通信协议。

当您使用 Backus-Naur 格式的典型规则时,它看起来像这样:

<symbol> : : _expression_

The <symbol> is nonterminal, which means you can replace it with elements on the right,  _expression_. The _expression_ could contain terminal symbols as well as nonterminal symbols. 

现在你可能会问,什么是终端符号?那么,它们就是那些在语法的任何组成部分中都不会出现的符号。终端符号的典型例子就是一串字符,如 "程序"。

由于上述规则在技术上定义了非终端和非终端组与右侧终端之间的转换,因此可称为生产规则。

语法类型 

语法有两种类型,即常规语法和无语境语法。正则语法用于定义通用语言。还有一种新近出现的语法被称为 "解析表达语法"(Parsing Expression Grammar,PEG),它代表无上下文语言,也是功能强大的无上下文语法。总之,这两种类型的区别取决于符号和规则的实现方式。

区分两种语法的一种更简单的方法是_表达式_,或者规则的右侧可以是......的形式:

  • 空字符串
  • 单一终端符号
  • 单个终端符号后跟一个非终端符号。

实际上,说起来容易做起来难,因为特定的工具可能允许在一个定义中使用更多的终端符号。然后,它就可以将表达式转换成一系列正确的表达式,这些表达式属于上述任一种情况。

因此,即使你写的是粗俗的表达方式,也会被转换成适当的形式,尽管它与自然语言并不兼容。

解析器的组成部分

由于解析器负责分析编程语言中符合语法规则的符号字符串,我们可以将解析器的功能分解为两个步骤。通常情况下,解析器受命以编程方式读取、分析非结构化数据并将其转换为结构化格式。

构成解析器的两个主要部分是词法分析和句法分析。此外,一些解析器还实现了语义分析组件,该组件将结构化数据筛选为:正向或负向、完整或不完整。虽然您可能会认为这一过程会进一步增强数据分析过程,但情况并非总是如此。  

由于人类语义分析的做法更受青睐,大多数解析器都没有内置语义分析功能。因此,语义分析应该是一个额外的步骤,如果您计划进行语义分析,它必须与您的业务目标相辅相成。

接下来,让我们讨论一下解析器的两个主要流程。

词法分析

它由 Lexar(也称为扫描器或标记器)执行,其作用是将原始的非结构化数据或字符序列转换为标记。进入解析器的字符串通常是 HTML 格式。然后,解析器利用词法单位(包括关键字、标识符和分隔符)创建标记。同时,解析器会忽略我们在导言部分提到的与词法无关的数据。例如,它们包括 HTML 文档中的空白和注释。

在词法分析过程中,解析器会丢弃无关的标记,然后进行句法分析。

句法分析

数据解析的这一阶段包括构建一棵解析树。这意味着解析器在创建标记后,会将它们排列成一棵树。在此过程中,无关的标记也会被捕捉到树本身的嵌套结构中。无关标记包括括号、分号和大括号。

为了让大家更好地理解这一点,让我们用一个简单的数学公式来说明: (a*2)+4

然后,解析器的词法词典会将它们分解成如下的标记:

( => 括号

a => 值

*> 倍增

2 => 价值

 )=> 括号

+ => 加

4 => 数值

此后,解析树的构建过程如下:

    当解析器从 HTML 元素中提取数据时,也将遵循同样的原则。

内部解析器还是外包解析器?

现在,您已经了解了解析器的基本方面。现在到了激动人心的时刻,是自建解析器还是外包解析器。首先,让我们来看看每种方法的利弊。 

内部解析器的优点

构建内部解析器有很多好处。其中一个主要好处是,您可以更好地控制规格。此外,由于解析器并不局限于任何一种数据格式,因此您可以根据不同的数据格式进行定制。 

其他一些重大优势包括节约成本,以及对更新和维护内置解析器的控制。 

内部解析器的缺点

内部解析器并非没有缺陷。其中一个明显的缺点是,当你对其维护、更新和测试有很大的控制权时,它会耗费你大量的宝贵时间。另一个缺点是,你能否购买并建立一个强大的服务器,以比你所要求的更快的速度解析所有数据。最后,您需要培训所有内部员工来构建解析器并提供相关培训。 

外包解析器的优点

外包解析器可以节省人力资源开支,因为采购公司将为您提供包括服务器和解析器在内的所有任务。此外,您将最不可能遇到重大错误,因为构建它的公司更有可能在向市场发布之前测试所有方案。

如果出现任何错误,您购买解析器的公司将提供技术支持。您还可以节省大量时间,因为构建最佳解析器的决策将来自外包。 

外包解析器的缺点

虽然外包好处多多,但也有其弊端。主要弊端体现在可定制性和成本方面。由于解析公司已经创建了完整的功能,因此会产生更多成本。此外,您对解析器功能的完全控制也会受到限制。

结论

在这篇冗长的文章中,您已经了解了解析器的工作原理、数据解析的一般过程及其基本原理。数据解析是一个漫长而复杂的过程。当你有机会亲身体验数据解析时,你就会掌握有效执行数据解析的丰富知识。

我们希望你们能有效地利用这些知识。