如今,智慧办公是企业办公领域数字化转型的题中之义。作为国内最早开发的软件办公系统之一,金山办公如何应用深度学习实现复杂场景文档图像识别和技术理解?本文将从复杂场景文档的识别与转化、非文本元素检测与文字识别、文本识别中的技术难点等多个方面进行深度解析。

作者 | 金山办公CV技术团队

出品 | 新程序员

在办公场景中,文档类型图像被广泛使用,比如证件、发票、合同、保险单、扫描书籍、拍摄的表格等,这类图像包含了大量的纯文本信息,还包含有表格、图片、印章、手写、公式等复杂的版面布局和结构信息。早前这些信息均采用人工来处理,需要耗费大量人力,很大程度上阻碍了企业的办公效率。

基于深度学习的复杂场景文档图像识别和理解技术的出现,将从繁杂的文档处理任务中解放大量人力,具有极高的应用价值。近些年,OCR(Optical Character Recignition,光学字符识别)技术在实际生活中已经广泛应用,清晰且平整的页面OCR均已达到理想的识别水平,但是当扫描的文档图像本身质量不佳(由拍摄光线不充分、抖动、背景干扰较大等引起),OCR结果往往不理想,加之复杂文档图像的语义结构不仅与文档内容有关,还与版面信息、视觉特征有关(如字形、版面、空间位置等)。因此,复杂场景文档图像识别和理解仍是一项充满挑战又前景广阔的研究。

复杂场景文档的识别与转化

近年来,国内很多专注于办公或文档处理领域的公司,在文档领域都有着不同程度的技术积累,对文档格式、排版和版面分析领域都有着各自的理解和思考。以金山办公为例,自2017年组建AI中台后,在文档内容和版式分析领域进行了传统技术积累和AI技术的结合,并在文档识别和理解领域做出了诸多成果,这些成果在一系列办公软件产品(如WPS、金山文档等)和功能上,发挥着重要作用。

在办公场景下,用户经常需要把PDF转成Word文档,或者把某一个截图里的文字提取出来,甚至有时候需要把一个拍摄出来的表格进行还原,以节省打字或者排版消耗的时间。以上的使用场景需要软件对文档图像进行文档对象识别、判断各区域所属类别,并对不同类型的区域进行分割,从中提炼关键性内容,例如文字、表格、段落关系、文字属性等对象,并针对各类对象进行识别、抽取和关系组织,最终进行结构化存储(例如输出xml、标准件PDF、docx、HTML等)。

为了实现以上提及的需求,需要做到的技术关键点是对图像的识别与对图像的理解。金山办公在通用引擎设计上构建了图像识别与理解的六大核心模块,引擎架构图如图1所示:

图1  文档图像识别与理解通用引擎架构图

文档图像识别包括图像的处理与图像的分析,图像处理是利用计算机对图像进行去除噪声、增强、复原、分割、特征提取、识别等处理的理论、方法和技术。狭义的图像处理主要是对图像进行各种加工,以改变图像的视觉效果并为自动识别奠定基础,或对图像进行压缩编码以减少所需存储空间。图像分析是对图像中感兴趣的目标进行检测和测量,以获得他们的客观信息,从而建立对图像的描述。

受制于文档图像不同的来源,导致文档图像本身由于拍摄光线、抖动、背景干扰、传输过程中的压缩等情况,文档图像可能存在质量较低的问题。为了提升图像识别能力,需要对这些质量较低的场景做针对性的处理,例如去阴影、去摩尔纹、画质提升、去水印、色彩调节(亮度、对比度、色彩等)、页面矫正等。下面列举带水印和带摩尔纹场景下采用的深度学习算法的处理方法。

文档图像中带水印的图片很常见,水印的干扰对文本的检测与识别带来一定程度的影响,所以在前处理时会采用类似于UNet的分割方案去除水印。

对屏幕拍摄图像时,相机传感器色彩滤波阵列与屏幕的亚像素混叠造成干扰,形成摩尔纹。摩尔纹一定程度对图像识别带来影响,通过去摩尔纹算法处理带摩尔纹图像后,能提升图像的识别能力。目前大多数方法都难以在4K图像中以更广泛的尺度范围去除摩尔纹模式。现有方法提出了一个语义对齐的规模感知模块,该模块集成了一个金字塔上下文提取模块,以有效和高效地提取在同一语义级别上对齐的多尺度特征。

非文本元素检测与文字识别

对于文档图像分析而言,非文本元素(包含图片、表格、印章、流程图、公式、手写体、色块等)具有重要意义。主流的非文本元素检测方案一般选择使用目标检测方案,目标检测可根据其实现方法分为Anchor-Based和Anchor-Free 两大方向,亦可根据其实现结构分为One-stage和Two-stage两大方向,如表1所示。

表1  目标检测常见方法

YOLO是目前主流的单阶段目标检测器,其较高的速度和精度是版面非文本元素检测的优选。通过通用的目标检测器可以轻松得到如图片、印章、流程图、公式、手写等简单元素。但是通用的开源检测方案也存在其缺陷,如无法准确定位需要多边形框的目标、无法准确检出较小目标(如logo)等。

对于多边形目标的检出,有效的方法是在ROIs(Faster RCNN)或者加入并行的Segment Head (One-stage) 来对目标区域再进行一次语义分割得到更精细的目标mask,最终通过轮廓找到其多边形坐标。

而对于细小目标的检出,对Anchor-Based的方案而言,需要对Anchors参数进行更细化的处理,可以通过增加几组面积更小的预设Anchor参数(Faster RCNN),或如YOLOv5一般对训练集进行一次分析和聚类得到fitness更高的Anchors预设组合。此外,可以通过在Backbone的Basic Block中加入如空间注意力(Spatial Attention),自注意力(Self-Attention)等方法扩大有效感受野以提高小目标检出。另一方面,因为小目标在训练集中的分布大概率是稀缺的,可以通过加入OHEM(Online Hard Negative Example Mining)或Focal Loss到损失函数中以缓解样本分布不均衡问题。除此之外,提高输入图像分辨率大小可能是最简单的做法。

文字识别,又称光学字符识别,是文本图像领域中的一个重要的基石。文本识别一般分为两个步骤:文本检测和文本识别。

早期计算机领域一般采用手工特征提取的方式进行文本检测,如SWT、MSER等算法得到文本所在位置,再利用基于模板的方法或者机器学习的方法对文本区域进行分类得到文本内容。顺着深度学习的发展潮流,文本检测的方法也逐渐衍生出基于回归和基于分割两个方向的研究。基于回归的方案即将文本行所在位置的坐标直接通过回归预测的方式得到,如CTPN、SegLink等。而基于分割的方案则是通过语义分割的方式先得到文本区域的mask,再利用轮廓检测的方法得到其坐标,如EAST、DBNet等。而文本识别则是发展为以CRNN为代表的序列预测方案。端到端的文本识别方案,即将检测和识别作为不同的分支并入一个模型中的方案,也应运而生。

基于回归的文本检测主流方案是TextBoxes++,以SSD目标检测为基本框架,引入default box回归分支以获得文本框四点坐标的偏移量,通过回归获得的文本最小矩形框(四点坐标)及default box计算得到最终的多角度文本框坐标。如图2所示:

 图2  TextBoxes++网络结构图

基于分割的文本检测主流方案为DBNet,通过将创新的可导二值化模块一同送入网络学习解决了以往分割类文本检测后处理需要使用固定阈值获取文本mask导致的鲁棒性问题。并因其更快的预测速度和更高的预测精度在文本检测领域获得了广泛的使用和延伸。如图3所示:

图3  DBNet网络结构图

在文档图像领域,开源的通用文字检测模型如DBNet、TextBoxes++等可以在常规场景下使用。但是也存在许多的缺陷,如密集文本会出现粘连问题、小字和符号检出率低、变形褶皱文本检测困难、印章或水印签名干扰等。所以还需要通过方案或模型的进一步改造适应特殊场景的需求。

文本识别中的技术难点

主流的文字识别以序列预测方向为基础,通过卷积神经网络提取图像特征,再利用序列模型对特征进行进一步编码预测,最后通过转录/翻译层进行解码得到最终结果。其中,最主流的实现方案为CRNN。CRNN成功引入了语音识别中的CTC(Connectionist Temporal Classification)转录层,通过CTC将序列预测结果转录为字符串结果,并使得其能支持可变长度的输入。

不同于场景文字识别,文档图像文本识别存在其独特的技术难点,如带声调的拼音、化学式、字符间距及空格、不同底色背景和字体、不同的文字朝向等。深入的解决方案又会衍生出很多篇幅,这里不做赘述。

表格识别相当于一个小型的版式还原系统,包含表格检测、表格分类、表格结构识别、表格内元素(包含文本和非文本元素)检测与识别、表格属性识别等部分,其中表格检测、表格内元素检测与识别和表格外部的检测与识别基本无异,这里着重讲一下表格分类、表格结构识别和表格属性识别部分。

表格分类是对检测到的表格区域进行进一步确认和细分类,表格分类的目标有两个:(1)判断输入的图像是否是表格;(2)依据表格边框类型将表格图像分为全封闭有线表、三线表、无线表和异形表,如下图4所示。表格分类对于减少表格误检和提高后续的表格结构重建有着非常重要的作用。

图4  样式繁多的表格

传统的表格分类方法往往是利用表格的统计特征(如线条特征、角点特征等)来进行分类,其鲁棒性差,分类准确率较低。目前对于这类图像分类任务,我们大多采用基于卷积神经网络的深度学习分类方法,如VGGnet、MobileNet等。然而在实际工程中,我们发现,总有一些非表格图像被误分为表格类,分析认为分类模型仍然是通过学习线条的特征来判断输入图像是否是表格类别。为此,我们采用One-class learning的思路,通过将非表格类图像当作是数据集中的异常点来进行排除,大大减少了表格的误检率。

表格结构重建是表格识别任务最重要的部分之一,用于还原表格的单元格结构。实践发现,不同结构类型的表格一般适用于不同的解决方法,例如对于全封闭有线表,其表格横竖线的特征都比较明显,可以充分利用线相关的特征来优化结构的还原效果,而对于无线表格,则缺少表格线的指导信息,此时就要求能够利用文本的语义信息和位置信息来自动构建合适的单元格结构。目前行业中的表格还原方法依据还原思路的不同可以分为以下四类:

  • 基于传统规则的方法

一般是基于启发式规则和传统的图像处理,主要利用表格线、文本块位置以及文本块之间的间隔等信息来确定单元格的位置,从而重建表格的整体结构。这类方法非常依赖于表格线和文本块的检测以及预先设计的规则,受制于传统图像算法检测表格线的准确率较低,早期的基于传统规则的表格结构重建方法效果较差,无法在各种场景中获得较高的准确度,且通用性和鲁棒性都不够好。

  • 基于深度学习检测/分割的方法

近些年,随着深度学习的蓬勃发展,基于深度学习的检测和分割均取得较大进展,在表格结构重建中也有了较为成功的运用,如基于传统规则的表格结构重建方法基础上,使用如FCN\Unet的分割网络等来分割表格线,使用诸如DBNet的检测网络来检测文本块,再辅以结构重建的规则,可以取得不错的效果,如腾讯的表格识别项目和table-ocr开源项目。在SPLERG方法中,首先利用分割网络将图像分为多个网格区域,每个网格区域代表候选单元格,再通过合并网络将跨行跨列的候选单元格合并起来便完成了表格结构的重建,在TableNet方法中,使用分割网络分割表格的列区域,再采用基于规则的方法将列的分割结果处理成最终的单元格邻接关系,从而得到表格的结构。这类方法可以准确地获得单元格的逻辑坐标和物理坐标,但对弯曲/扭曲表格和少线表的处理还有较大提升空间。

  • 基于深度学习图神经网络的方法

表格作为一种结构化的数据,表格的结构与表格内的文本在空间中有很强的依赖关系,将表格内文本以及文本之间的关系建模为一个图,使用图来描述表格结构,就可以采用图网络来解析和重建表格结构。这类方法一般需要提前检测和识别文本的信息,将每条文本作为一个顶点,将文本的OCR信息、位置信息、图像特征等作为顶点的信息,然后使用图网络来判断顶点之间的关系,再经过一些后处理即可完成表格结构重建。这类方法能够结合图像特征、OCR语义特征等多模态信息,尤其在无线表的结构还原上有着天然优势,但是该类方法流程较复杂,且当表格文本数量特别多时,图网络的效果和耗时均有待提高。

  • 基于深度学习端到端的方法

使用image-to-text的思路,输入表格图像直接输出表格结构的描述,实现端到端的结构识别。在这类算法中,一般先使用特征提取网络提取表格的图像特征,然后再通过诸如Transformer解码器的网络来做序列的识别,完成图像到结构序列的转换。端到端的表格结构重建方法流程简单,而且不用制定复杂的后处理规则,但其一般只输出单元格的逻辑坐标而缺失物理坐标信息,而且这类方法大都将表格检测、文本检测和识别以及表格结构重建耦合在一起,不易解耦。

文字属性识别(Charater Attribute Recognition),是对检测区域的文本进行字符属性识别。它是在OCR内容识别基础上进行的字符属性特征分析,表现为更细粒度的特征。其属性主要包括字体、字号、颜色、粗体、倾斜、高亮、下划线、删除线等属性,如图5所示,这些属性可以使文档更加饱满和丰富。

图5 文字相关属性说明

字体识别是对检测区域的字符的字体进行识别,通用引擎支持了中文与英文字体的识别能力。对于文档图像字体分析方法,目前市场上大部分由CNN网络提取特征和分类器组成。其思路大致如下:

  • 获取字符的区域坐标,并截取字符区域图像;

  • 将截取的字符图像送进CNN网络提取特征;

  • 对字符的字体特征进行分析,并获得字体类别。

该方法的优点是可以详细分析每个字符的字体属性,尤其是对一个文本上有多种字体的情况,但是对于符号类型的字符,字体分类也很难分辨。另外,模型识别时,对上游的检测有较强依赖和密集的识别计算,所以对于低质量和篇幅较大的文档图像仍有不少挑战。

文字字号是文字的一个重要属性,反映字符在文档中的大小空间关系。对于文档排版,尤其是层级不一样的文本中,可以让版面结构更清晰和完备。字号的计算方式一般是:

size=pix*72/dpi,

其中pix是字符的宽或高的像素个数,dpi是每英寸点数(Dots Per Inch)。

文字颜色和高亮,文字颜色是最直观和最简单的文字属性信息,它可以让文档层次分明,让文档丰富多样。在不同的场景下,字色和背景的还原需求以及难度是不一样的。目前有效的方案大致分为两种:

  • 传统图像处理方法包括像素直方图统计、边缘检测、分水岭算法等,特点是速度快,但是泛化性比较差,比较依赖场景和经验;

  • 深度学习算法包括目标检测、语义分割等,可以解决传统算法的痛点,但是数据集标注成本高、推理耗时比较高;实际应用中可以结合深度学习算法和传统算法。

文字粗体,因为加粗字体和未加粗字体具有明显层次特征,所以在文档中具有强调功能。在拍照键文档中,目前很少公司做粗体识别功能。基于粗体在文档中具有强调功能,采用检测算法对文本粗体检测应该是可行的。获取到粗体位置后,根据检测位置切分粗体区域和非粗体区域来实现字符粗体的识别。

文字斜体是反映字体是否倾斜的一种状态,特别是在某些英文的场景下,斜体可以让文档更具美感。因为斜体字符一般是连续出现,所以对于斜体是采用多个字符图像进行分析。其主流方法还是上述提到的CNN网络和分类器结合。

对文档图像理解的多模态融合探索

图像理解是在图像分析的基础上,进一步研究图像中各目标的性质和它们之间的相互联系,并得出对图像内容含义的理解以及对原来客观场景的解释,从而指导和规划行动。随着全球数字化进程的推动,文档型图像内容成为企业办公的重要内容之一。人们对于海量文档智能解析和检索的需求日益高涨,因此,文档图像理解应运而生。文档图像理解站在计算机视觉(CV)和自然语言处理(NLP)的基础之上,融合两种模态进行更深入的探索,推动人工智能从机器感知阶段走向更智能化的机器认知。

大规模预训练任务

自2018年以来,伴随着BERT的问世,自然语言处理领域进入了预训练技术新纪元。受益于BERT(Transformer)的优秀架构和性能、海量无标注文本数据及澎湃的GPU算力加持,预训练语言模型的规模和性能不断被推向新的高度。如2020年发布的预训练语言模型GPT-3已经达到了惊人的1750亿参数量,在应用端ChatGPT的问世更是引发了人工智能领域的轰动。

与传统的有监督训练模型相比,大规模预训练模型有更大的参数规模,意味着其拥有着更强大的“知识储备空间”,而其无监督训练的特性使其能够在最低的成本下获取到最多的通用知识,因此只需要用少量标注数据进行微调就可以轻松适配各类下游任务。

因为Transformer架构的通用性,其计算机视觉领域中也得到了广泛的应用,大量企业和高校也看到了Transformer架构存在多模态通用的特性,纷纷开始探索多模态预训练任务。其中在文档理解领域以微软的LayoutLM系列和华南理工大学的LILT为主流。

LayoutLM系列通过结合文本位置信息(2D-Embeddings)、图像特征信息(Image-Embeddings)和文本语义信息(Text-Embeddings)进行预训练任务。预训练任务包括掩码视觉语言模型(MVLM),随机掩盖部分单词的文本信息,让模型根据语境预测被掩盖的单词以学习上下文语境。预训练任务还包括多标签文档分类(MDC),让模型学习到每个文档图像属于什么类型的文档的判断能力。辅以海量文档数据即可得到足够强大的预训练文档理解模型。如图6所示:

图6  LayoutLM系列结构图

LILT则是结合文本信息(Text-Embeding)和布局信息(Layout-Embeddings),利用BIACM(Bi-directional Attention Complementation Mechanism)使得两种信息流得以交互,提高模型跨模态信息交融的能力。预训练任务在同样使用了MVLM的同时还加入了KPL(Key Point Location)任务,通过掩盖掉部分文本坐标,让模型根据语义和布局信息预测掩盖掉的文本的坐标,让模型拥有布局感知能力的同时尽量缓解前置OCR可能带来的文本坐标偏差影响。此外,LILT还加入了模态对齐任务(Cross-modal Alignment Identification),通过掩盖掉语义信息或者位置信息,让模型判断哪些信息是被掩盖的,从而让模型学到跨模态对齐能力。如图7所示:

图7  LILT架构

关键信息抽取与关系匹配

文档图像理解的重要应用之一就是关键信息抽取与匹配。对于文档图像内的关键信息提取,一般采用命名实体识别(NER)方案,即通过模型对输入信息(图像/文本/语音)进行解析并获取信息里具有特定意义的实体(主要包括人名、地名、机构名、专有名词等,以及时间、数量、货币、比例数值等文字)。而关键信息匹配则是将命名实体与其对应的信息进行关系配对,如国家(实体):中国。

在2022年CSIG图像图形技术挑战赛中,金山办公在小票理解赛道中就使用了关键信息抽取技术并取得冠军。对于关键信息抽取任务而言,其准确度会受到前置OCR结果误差、阅读顺序等制约。在关系匹配任务中,其准确度也会受到如实体信息缺省、同时存在多个实体信息等情况的干扰。对于阅读顺序造成的准确度降低问题,可以采用XY-Cut的方式,对前置OCR的输出结果进行阅读顺序粗略排序,一定程度上可缓解其影响。此外,在做OCR之前先对图像进行前置矫正(弯曲、倾斜、透视变换)也是一个比较好的处理方法。在做实体关系匹配的时候,可以先用一个轻量化的目标检测模型将某些存在复杂属性的实体进行位置约束,如小票数据里的商品实体(如图8所示),确保关系匹配不会被同类实体干扰。命名实体识别和关系匹配所处理的特征相似,因此在工程实现上可以做到两个任务共享同一个模型主干以降低开销。

图8  小票数据里的商品实体

整套服务系统基于K8s部署在CPU和GPU异构设备之上。分成以下七个部分:终端,多来源的接入;网关层,KLB作为一级网关,kong作为二级网关;服务层,由调度层(scheduler)、算法层(algorithm)、转换层(transform)构成的3层结构;推理框架,通过调起推理进程池,加载指定的推理框架和模型进行推理;中间件,通过Redis进行中间状态缓存,采用RabbitMQ做消息队列,进行服务间通信与负载均衡;运行环境,基于kae(K8s)做服务构建与部署,运行在CPU与GPU之上;可观察性,做服务调用链追踪、日志系统、监控与告警等。如图9所示:

图9 整套服务系统架构图

结语:从感知智能向认知智能的演化

该通用引擎具备了对各类型文档图像的处理能力,在WPS的产品中,PDF转Word、图片转表格、扫描件PDF编辑等功能已采用以上提到的能力(见图10-12)。

图10 PDF转docx

图11 PDF转表格

图12  扫描件PDF编辑

图像处理是比较低层的操作,它主要在图像像素级上进行处理,处理的数据量非常大。图像分析则进入了中层,分割和特征提取把原来以像素描述的图像转变成比较简洁的非图形式的描述,这一过程以视觉感知为主。图像理解主要是高层操作,基本上是对从描述抽象出来的符号进行运算,其处理过程和方法与人类的思维推理有许多类似之处,这一过程以认知为主。后者尚未成熟,但是颇具技术和社会价值,是金山办公在图像文档处理领域从感知智能向认知智能演化的技术路线。

近年来深度学习发展迅猛,在图像、文本、语音、推荐等多个领域都取得了显著成果,在文档图像识别任务日趋成熟下,针对多模态文档理解任务,不仅将文本信息和页面布局信息,还将图像信息融入到了多模态的框架中,空间感知自注意力机制的引入进一步提高了模型对文档内容的理解能力。伴随着数字化转型的深入,相信在文档智能理解的研究和工业落地上的工作会有越来越多的研究人员和企业参与其中,共同推动信息产业化相关技术和行业的发展。

年刊扫码订阅

AIGC席卷智慧办公,金山办公如何架构文档智能识别与理解的通用引擎?相关推荐

  1. java计算机毕业设计分时共享办公系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计分时共享办公系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计分时共享办公系统MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: 项目架构:B ...

  2. java计算机毕业设计校园办公管理系统源码+lw文档+系统+数据库

    java计算机毕业设计校园办公管理系统源码+lw文档+系统+数据库 java计算机毕业设计校园办公管理系统源码+lw文档+系统+数据库 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开 ...

  3. 智慧社区综合管理平台——需求文档(第九组)

    目录 1.引言  1.1 项目简介 1.2 目的 1.3 文档的范围 1.4 预期的读者和阅读建议 1.5 产品的范围 1.6 参考文献 2.总体描述 2.1 产品视角 2.2 用户特征 2.3 系统 ...

  4. uml具有多种视图_UML建模与架构文档化

    UML(统一建模语言) 是用元模型描述的,元模型是4层元模型体系结构模式中的一层.此模式的其他层次分别是元-元模型层.模型层和用户对象层. 在原模型层,UML元模型 又被分解为三个子逻辑包:基础包(核 ...

  5. [转]OpenContrail 体系架构文档

    OpenContrail 体系架构文档 英文原文:http://opencontrail.org/opencontrail-architecture-documentation/ 翻译者:@KkBLu ...

  6. 脚本文档_创建完美的架构文档脚本

    脚本文档 描述 (Description) System views allow us to gain access to information about any objects within S ...

  7. ssm+Vue计算机毕业设计智慧工地管理系统(程序+LW文档)

    ssm+Vue计算机毕业设计智慧工地管理系统(程序+LW文档) 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...

  8. ssm+Vue计算机毕业设计郑州市智慧农贸市场管理系统(程序+LW文档)

    ssm+Vue计算机毕业设计郑州市智慧农贸市场管理系统(程序+LW文档) 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ ...

  9. Spring架构文档:程序员(工程师)的圣经

    圣经 作为一名工程师,尤其是服务端工程师,在Spring架构大行其道的时候,只有熟悉Spring的架构,才能有未来啊! 一.Spring的架构文档 Spring的架构文档 这个有空的时候,多读读!

最新文章

  1. iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据
  2. BREW应用的分发流程
  3. 使用react、antd组件报错TypeError: _this.formRef.current.validateFields is not a function
  4. ftp无法连接虚拟机_一步步编写操作系统4 安装x86虚拟机 bochs
  5. 新的编程语言研发契机思考
  6. Exchange队列优先级介绍和配置
  7. SQL基础E-R图画法(一)
  8. nodejs mysql mvc_一种nodejs的MVC框架
  9. mongodb 导出时间格式_MongoDB批量将时间戳转为通用日期格式示例代码 _ 蚂蚁视界...
  10. PowerDesigner设置线风格(直线,折线。。。)
  11. 2014,都要好好的~
  12. JavaScript通过变量设置对象键[重复]
  13. 聚类算法实践——PCCA、SOM、Affinity Propagation
  14. lt;转载自刘佳ID:freedom0203和waretgt; C++中成员初始化列表的使用
  15. Python内置的服务器的使用
  16. flv 文件格式详解
  17. 基于Arduino的多功能数字时钟
  18. PLC是什么?它的作用是什么?
  19. stata基于cox回归制作临床决策曲线
  20. visio画两条直线交叉但不弯曲不跨线

热门文章

  1. 最新VLC命令行参数大全(一)
  2. Knowledge Base、Semantic Web、Semantic Network、Linked Data、Knowledge Graph概念解析
  3. Commonsense Knowledge Base Completion with Structural and Semantic Context
  4. 《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.1 初识速卖通的搜索引擎...
  5. 齐枭飞 Vue系列--vue的图片路径,和背景图片路径打包后错误解决
  6. 如何利用微信个人号打造属于自己“私域流量”?
  7. 说好的3个月实习期结果被赶鸭子上架顶班干活
  8. VC++创建计划任务的若干方式
  9. XCopy复制文件夹命令及参数详解
  10. Android 快速开发系列 打造万能的ListView GridView 适配器