AI工程的实践者:普元积极将场景落地,为企业提供智能化解决方案
作者 | Jane
出品 | AI科技大本营
11 月 8-9 日,CSDN 和 AICamp 联合举办的 AI 开发者大会在北京顺利举行。普元移动产品线总经理郝振明发表了《基于机器学习的工程实践》的主题演讲,并接受了 AI科技大本营的专访。
以下内容为郝振明的演讲与采访总结,文内略有删减:
演讲
机器学习有RPA结合的必要性
今天的演讲主题是根据普元在 RPA 实践过程中的一些经验分享,是从工程化的角度来探讨如何解决特定领域中的问题。RPA (Robotic Process Automation),就是把人重复性劳动通过自动化手段去完成。例如,有些公司代理申报纳税,这个工作流程是比较繁琐的,直到最后完成提交,需要大量重复录入的工作。整个流程非常耗费人力,而我们所做的主要工作就是把其中重复性的劳动交给软件来完成,用软件方式解决一个跨系统的问题。而我今天的分享将结合财务工作中报销工作环节的实现和大家进行探讨。
首先,RPA 不适合小型企业。因为小型企业不涉及大量的重复性工作,所以,明确了这个前提:RPA 适合大型企业,集团型企业几乎都会做财务共享中心。在现实中,员工提交粘贴好的发票后,剩下的工作都需要财务共享中心来完成,在这个场景中为什么应用 RPA 是最合适的?RPA 传统做法是需要结构化数据,就这个需求而言,核对发票真实性,把电子版发票变成有用的信息,低效易错的手填发票,人工智能在很大程度上解决了这些繁琐的工作流程。
机器学习有RPA结合的工程实践
而我们现在努力解决的工作主要有三点:以获取结构化数据为前提、使流程高度标准化、其核心技术采用 GUI 的录制与回放。此方法基于非现实世界的目标检测和驱动,与此进行交互的不是人类而是系统,绝大多数情况下通过迁移的方法。
在获取结构化数据的过程中还存在一些技术难点。比如某些出租车发票上的字体,人眼可能也无法分辨清楚。我们又该如何做到呢?是否有一个通用的算法模型或神经网络可以直接解决?经过我们的研究发现,这还是一件有难度的事情。尤其是增值税专票的处理与增值税普通发票的处理都还存在着不同之处。到这里我们就知道,首先要做的就是先要对发票进行分类,而仅有类型的分类是不够的,还需要做具体内容的识别,如到底公司名称及金额。这些工作原来都是人工手动完成的,我们把整个流程在经过纸质化转化成电子化后进一步做了分解。
如何做发票的分类处理?首先要全程跟踪电子发票,这是软件系统就可以完成的工作,并不需要复杂的机器学习算法。接下来,发票类型决定了后续如何进行处理与训练。经过我们的实践发现,进行发票内容识别时,用同一个 OCR 模型并不能识别所有类型发票中的内容。比如,出租车发票是点阵击打形成的,这就是一个比较难处理的问题。在前期分类,各模型处理后,某个效果如果仍然不好,我们就会单独针对性的解决,不再做整体处理。在分类处理发票步骤中,我们主要使用 Fast-RCNN 模型,从时间角度来说更符合我们期望得到的效率。
目标检测之后,我们得到了更好的圈定范围,排除了那些无意义,会产生干扰的部分。我们没有找到一个通用数据集去训练模型,我们是自己在一个不大的数据集上实现的,效果还可以。但是,在这个过程中,也结合了其他的技术手段。我们在训练网络模型的时候发现了一些点,有时候彩色是有帮助的,有时候它也是一种干扰,反而用黑白色效果更好,所以我们把两个网络同时训练。在预测阶段转成彩色图或灰图,对比并选择更优效果。
上面谈到的主要是发票分类的问题,在实践过程中,我们还发现了一个不可忽视的重要问题——发票的数量。粘贴发票可以是单张也可以是多张,当单张的情况下,我们通过刚刚讲的一些方法来解决,但当不止一张的时候该如何去做?首先要对发票进行识别及切图,然后进行摆正、文字区域识别,文字内容识别等。我们得到的切图效果还是可以的,准确度达到了 90% 以上。而发票的检测,切分及识别更多是为了后续的工作。如果直接交给 OCR 系统实现的效果一般,无法分清普通发票和增值税发票的情况下,我们会把两张发票进行合并,但是后续也会带来一些隐患。最后,我们用了一个扫描二维码的功能,这是一个简单的步骤。我们对用二维码扫描得到的信息做分类,第一个字段目前没用,第二个字段表明发票类型。这里特别提到一点就是二维码信息的作用,除了提供了发票类型,在后续的一个场景中也起到了关键作用。
接下来,想和大家探讨的第二个大问题是关于数据集和模型训练。我们自己也有一些定位,一开始在训练效果不是很好的情况下,我们又加入了一些数据集重新训练,从 60% 提升至 80%多,我们也会根据结果不断的调整模型。
进入下一环节,涉及选择 SaaS 服务还是私有化方案。我个人更倾向于 SaaS 服务,相对成熟。但在这里需要考虑一个问题,发票报销涉及很多流程,很多信息会被泄露,通常建议使用 SaaS 模型,但一些特殊情况下必须考虑私有化方案。
OCR 识别中还需要讲到三个比较关键的问题:对稍微有倾斜的发票,OCR 效果不好,需要增加一个环节,先摆正;字体不清晰的情况下,先用场景类文字检测方法进行区域检测;文字识别过程涉及特殊字体时,进行针对性不同的处理。判断发票类型,调整等工作用传统的 CNN 就可以完成;检测文本我们用到的是 CTPN 模型。
我们还做了一个工作就是自建训练数据集,通过之前贴图我们获得了单张图,并自动把每张图旋转成 0 度、 90 度、180 度及 270 度。
未来,机器学习会融入各个行业,我们主要把机器学习的方法与工程进行结合与实践。机器学习与 RPA 结合的过程中,非结构化数据的结构化、智能的工作流、基于 NLP 及检测技术下的自动化,这三个工作我们都在实践,现在第一和第三个工作取得的效果还可以。未来,我们会在各个领域结合机器学习、比较成熟并且效果好的网络,我们也会特别关注先前工作为后续工作带来的启发。
采访
AI科技大本营:可以先介绍一下您自己和负责团队的情况吗?
郝振明:我在普元已经近 16、17 年的时间了。最早在公司是做 JAVAEE 的,后来公司业务需要移动产品,我就转到移动产品研发。最近,从 2014 年开始,我有 1/3 左右的精力在人工智能上,原因很简单,任何一个事物,在我们公司内部都不是立刻显现、被需求的,会经历一个孵化阶段。对我们团队而言,就是一个不断孵化的过程。我们在先进领域都是从不懂到开始学习,慢慢成长起来的。为什么关注人工智能?我认为,未来的设备可能不一定是移动智能手机,但一定从智能手机开始的。所以对我而言,这是一个切入点。未来,我是都会一直在这个方向走下去,更多的从公司业务需要出发,寻找个人的方向。
AI 科技大本营:您和您的团队目前的工作是公司面向 AI 的主要方向或业务突破口吗?
郝振明:我们有几条线,每条线路都会有。从我个人角度而言,我认为我们可能会取得的突破多一些。原因有几点:首先,我们进入比较早,大概在 2013、2014 年就开始尝试了。到了 2016、2017 年,不敢说做的怎么样,但至少是愿意和大家进行分享的。其次,我们也做了投入,未来很多场景都会有人工智能,而不是部分公司。公司也是认为“人工智能会融入到各个产品线”。
AI科技大本营:您公司和团队在做 AI 相关工作时有哪些思想和经验可以和大家分享一下吗?
郝振明:其实,在过去的几年里,我们在很多领域进行了不断地尝试与分享。去年,我做过一次分享,主要围绕 AI 如何与开发结合的相关问题。所以,除了大家都比较关注的基础层面的工作,我们其实更多关注如何在解决实际业务中结合 AI 。今天的分享中主要讲到的是 RPA,用简单易理解的方式来解释,就是通过自动化手段完成一些具有很多重复性劳动的业务与工作。主要讲到的财务报销环节。这里面包含很多重复性人力劳动,不仅耗时耗历,效率也不高。所以,基于这个场景出发,我们研发了自己的 RPA。但是在完整的技术解决方案中,我们也不是全部依赖 AI,我们发现,传统方法有可能取得更好的效果。所以,我们在实际工作中,如何与 AI 结合有两个主要观点:我们需要 AI 但不单独讲 AI ,我们更关注 AI 如何与实际业务场景结合;我们不会为了使用 AI 而用 AI,在 AI 真的有更好的发挥作用的时候结合 AI,最终为企业提供智能化的解决方案。
在这次在分享中我也讲到了我们的一些方法和思想。首先,我们都是从实际业务场景出发。对于我们来说,理论的创新,算法性能的提升,基础工具的研发等基础层面取得突破工作相比,我们更倾向不断丰富业务落地场景,在实际场景中解决问题。这也许不是用的最新的网络模型、算法就足够的。但是可以让企业可以具备更智能化的问题解决方法,对整个市场,对企业客户乃至每个职员都会产生影响,这也是我们在此方向上努力的原因。
于此同时,在我们的工程实践中,仍然会面临很多的挑战。比如在 RPA 就还存在很多问题,分享中我也提到了,RPA 必须需要结构化数据,我们在这方面也做了很多工作后,发现非结构化数据转化结构化数据时,人工智能的优势非常明显,在这个过程中我们用到了一些算法和模型。通过不断的实践,找到最适合的算法,在结合我们的算力和数据完成一个智能化的工作流程。在一些算法也不能很好的解决某些问题时,我们进行单独分析,加入一些辅助方法或环节。除了关注研究前沿,我们在现实业务工程化时一般会挑选一些相对成熟的算法或网络,但是我们不聚焦于某一种算法,而是聚焦于那些适合、可以在当前的场景下发挥更大的作用。
就像大家都比价熟悉的 OCR 技术,但我们在工程实践中就会发现,应用在特定,专业领域中会效果不一定一样的好。比如在 RPA 中,识别增值税发票内容时,当字太小,不清晰,套打走行等多种复杂情况同时存在时,如何运用 OCR 技术并取得良好的效果?所以,我们需要我们的人才专注在某一特定领域,解决实际问题。
公司层面,其实在不同领域都有进行尝试,无论是在开发阶段,还是应用阶段。不仅是技术的验证,我们努力结合每一个业务场景,专注落地。
AI科技大本营:您刚才提到的很多还是涉及 RPA 在财务报销环节的应用,是首先在这个环节落地的吗?这是主打场景,还是除此之外也有别的?
郝振明:是的,我们最先实践的场景是财务报销环节,而实现业务流程自动化以提到生产力也是财务机器人最先落地的场景之一。但是确切来说,我们不是为了做广泛智能才做这件事的,是因为有了实际的需要。RPA 在一般在集团型企业都会涉及,在大型企业财务工作中对这方面有非常实际的需求。所以,在这个解决方案中,我们通过寻找合适的技术,结合 AI 给企业提供更智能化,高效的业务解决方案。
我们在其他领域也做了很多工作,比如数据领域。作为一个技术型公司,技术是否为我所用是我们关注的重点。除了前沿技术,Paper,学术产业会议,都会进行跟踪学习。还会有专业的算法工程师专门针对与场景结合的可行,有效性的分析。如果说单独做一个人工智能平台,从多角度来看不是我们的定位。
AI科技大本营:这样的工作理念是从什么时候就确立的?
郝振明:我们大概在 2014、2015 年的时候开始关注这个领域。一开始这个市场非常热闹,而我们关注这个领域本身源于一个最大的困惑:我们会不会被淘汰?是这样的一种自我忧患意识促使我们不断地进行尝试。后来,我们发现,我们需要的是:商业模式的差异化。从自身角度来讲,我们并不是像一些企业那样,需要有专业团队,我们致力于人工智能,但是当时我们还不具备充分的条件,在未来成熟以后我们也会做这件事。
再后来,我们就会发现,其实还是应该从自身寻找我们需要什么,知道了需要什么就决定了我们要如何做。
现在大家也都在讨论,人工智能除了技术,场景在哪里?我们对人工智能是长期看好的,但是现在最大的问题是让更多的人利用人工智能。同时,我认为如果人工智能往上再走一个阶段,其实是广泛的应用。而广泛的应用也不仅仅局限于现在大家都熟悉的客服机器人,娱乐。未来的世界难道就是这样的吗?也是从这个角度出发,我们在寻找更多的场景,希望做更多的落地应用。在这里也是希望很多行业能加入,大家共同做出更多更落地的解决方案。建立一个真正的 AI 生态,需要基础的算法,优秀的人才和丰富的场景,实践的落地。
AI科技大本营:有一类企业会特别地去研究自己的算法或者是构建平台。你们想做的实际上是比在做更上一层的工作?据我了解咱们应该都是服务的中大型的企业,自己是否想过具体服务到每一个场景,还会有很多问题,比如数据不完备?该如何解决呢?
郝振明:是的,我们现在更多的是在一个领域里做一件事情,我们也在积累,从技术解决策略上说我们会用到迁移学习等方法。我认为现在人工智能是正在起势的一个过程。我可以给大家引用这样一个例子就很好理解,我在 2000 年左右做程序员,那个时候讲软件这个概念是不容易被理解的。大家如果现在来看程序员,发生了一个很大变化的过程,从一个专业的小领域到普世。回到你刚问的问题,现在一些企业做了很多基础的工作,并不代表能把所有的人工智能全部依赖于此建立起来。我们也会关注这些工作,但我们更关注如何使用。也不一定就是某个或某些企业可以做这些工作,当我们的诉求越来越多,就会出现我们的结合点。
第二个关于数据量大小的问题。现在很多研究和工作都是基于大数据算,就我个人观点而言,是会存在一些问题的,比如不够智能化,个性化。我们可以看到目前一些工作可能只做到了人工的 70 %-80% 的水平,从以往经验不容易被发觉,也许恰恰是大数据反向制约的,但是一定会有突破性的进展。其实可以理解成利与弊的关系,数据量特别大,更容易总结,但可能因为数据量过大,导致突破自身原有经验成为一件有难度的事情。在这方面我们也进行过一些尝试,例如,当数据量不是特别大的时候,会基于一些基础网络进行迁移。从我们的角度而言,关注小数据在工程化实践中的作用,可以尝试用来防止额外干扰,再通过专业模型聚焦我们的关注点。利用小数据形成一些智能化解决方案可以说也是我们的一个期望。但是,目前我们还没有找到一个很好的点,但是相信,未来小数据量不会成为制约的问题。至于一些已经相对成熟的技术,为什么我们自己也在独立做?关键也在于此,在工程化实践中,结合某一具体场景,会需要专门解决的一些问题。所以,我们需要的不止是一个通用技术,是针对特定领域的技术。这就需要在与工程化结合的时候,自己研发、改进算法或模型来寻求更好的解决方案。
AI科技大本营:从更高的层面而言,目前的这些工作如何帮助普元更好的赋能企业用户?
郝振明:这里有两个关键点:一个是自身的 know-how,一个是工程化。刚刚忽略的一个问题是:本身体系的延续性。通过技术本身,寻求技术,做技术的沉淀。
AI科技大本营:在未来的工作中面对不断的挑战有哪些措施?
郝振明:未来,我们期望是不是可以不仅局限于通用世界?从工程化阶段来看,我们需要等待成熟,因为在还不能做的很好的情况下,选择躲避一些问题,可能是更欠妥的做法。所以,除了技术角度,算法角度,我们还会结合工程方法,比如软件工程的方法来完成。通过这种方式突破我们自身或现在行业内的情况。尚未做的很好,也是我们在接下来的工作中努力尝试的。我个人而言,我不是一个科学家,我更像一个干活儿的。我需要用的知识,技术,工具,有专家的成果可以让我去尝试,但终有一个是我要瞄准的方向,从而挑选出一个适合我们的。
本文为 AI科技大本营原创文章,转载请联系微信 1092722531。
公开课预告
◆
今晚8点
◆
主题:精讲NLP的经典应用实践——文本分类
时间:今晚8点
入群福利:添加小助手微信cadnai2,加入课程交流群。课程QA,PPT共享、还有机会获得黄鸿波老师的新书《TensorFlow进阶指南 基础、算法与应用》
推荐阅读
一个程序员父亲的呼吁:不要教你的孩子从小学编程!
谷歌搜索重返中国按下暂停键,CEO皮查伊“对决”美国国会
PingCAP申砾:做一个真正通用的数据库产品
玩过音乐, "推过"嫩模, 以太坊大神人设崩塌, 有钱任性也抵不过区块链寒冬
趣店斗鱼深陷裁员风波,程序员寒冬何去何从?| 畅言
锤子变天?| 畅言
程序员加班很严重吗?看看国外程序员怎么怼老板!
点击“阅读原文”,打开APP 阅读更顺畅
相关文章:

android用户界面设计:基本按钮,Android用戶界面設計:基本按鈕
本文向你展示了在你的android應用程序中創建一個簡單的Button或ImageButton控件的步驟。首先,你會學到如何向你的布局文件中添加按鈕控件。然後你會學習如何用兩種方法處理用戶對按鈕的點擊。最後,我們討論android中按鈕控件一些其它的可用特性。第1步&a…

快速浏览Silverlight3 Beta:当HLSL遇上Silverlight
HLSL高级着色器语言(High Level Shader Language,简称HLSL),由微软拥 有及开发的一种语言,只能供微软的Direct3D使用。 HLSL是微软抗衡GLSL的产品,同时不能与OpenGL标准兼容。他跟Nvidia的Cg非常相似。 看…

“80后”财富新贵创业秘诀
"80后"财富新贵创业秘诀:具有冒险和创新精神 不论是文化市场,还是经济市场,当许多人还认为还是“60后”或“70后”的天下时,“80后”财富新贵已在不知不觉中浮出水面,并试图用自己的实力证明新一代的崛起。李想、戴志康…

小插件 打开Android程序动画,android-单击小部件后如何启动活动?
这就是对我有用的…onUpdate方法代码应为:Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {for (int i 0; i < appWidgetIds.length; i) {int appWidgetId appWidgetIds[i];try {Intent intent new …

“深度学习之父”大谈AI:寒冬不会出现,论文评审机制有损创新
整理 | 琥珀出品 | AI科技大本营【AI 科技大本营导读】近日《连线》杂志发表了一篇文章,记录了与“深度学习之父” Geoffrey Hinton 围绕人工智能伦理、技术、学术等领域的采访实录。当被问到如今人工智能是否将走进寒冬时,Hinton 的回答非常坚决&#x…

金山词霸2009牛津版
http://download.iciba.com/Pw2009_oxf/Powerword2009Oxf.25269.4011.exe新版本的词霸2009牛津版的 需要的朋友下载看看 转载于:https://blog.51cto.com/zmdzhangzhe/112418

面向对象之数值的悲剧(8月28日会议有感)
枚举的悲剧 枚举基本用法大家应该都很熟悉,在我们去避免硬编码,增强代码可读性,可维护性方面很好用。不过话说枚举底层还是比较复杂的,以前看过一些关于枚举的说明。至少C#里边的枚举是很复杂的,本身是结构类型&#x…

C++虚函数探索!
C中的虚函数实现了C中的多态。昨天C老师着重讲了讲虚函数。这个很重要,也有点玄机在里面。 下面阐述一下理论: C的类机制中有支持多态的技术来解决抽象编程。使用的是滞后捆绑技术。即预先设定其成员函数虚函数性质,使得任何捆绑该成员函数的…

htc820+android+l,首款高通64位八核 HTC Desire 820评测
9月初的IFA2014展会期间,多款搭载64位处理器的新品智能手机扎堆发布,也算是拉开了64位处理器安卓手机的时代序幕。其中,最引人注目的新品之一莫过于HTC Desire 820,它于北京时间9月4日在德国柏林发布,拔得了全球首款64…

关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的/g是什么意思?”...
为了解答“正则表达式(/[^0-9]/g,)中的"/g"是什么意思?”这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯糊涂的地方再系统总结一下。 总结1:附件参数g的用法 表达式加上参…

那位13岁就当上老板的开发者是如何炼成的?
当我们听到有关年轻有为的企业家的故事时,大多会想到 25 到 30 岁左右的年轻人。毕竟,Google、亚马逊、Facebook、Twitter、LinkedIn、Pinterest、Instagram、Snapchat 以及其它很多公司的创始人都是在他们 20 多岁时创办的这些企业。随着人们与科技的联…

phonegap android,Phonegap 3不适用于Android Studio
对我来说,这似乎很简单,但我根本做不到.我已经成功安装了npm install -g phonegap并安装了phonegap.C:\var\www\sexdiaries.co.uk>phonegap create sexdiaries -n SexDiaries -i co.uk.sexdiaries.app然后,我被告知Here尝试运行andriod但出现以下错误C:\var\www\sexdiaries.…

安装VCenter提示数据库排序规则有问题
安装VCenter提示数据库排序规则有问题 有时候在安装sql server 数据库时你如果修改了排序规则,那么在安装VCenter时它会提示你的数据库排序规则有问题,不让你安装。这个时候你去修改一下数据库规则就可以继续安装了。 解决方法: 1.把安装光盘…

点滴印象中的周其凤校长
原文:[url]http://blog.sina.com.cn/s/blog_4908ded80100bbui.html?tj1[/url]2003年9月,我进入吉林大学读书,第二年周其凤成为吉林大学新任校长。此后的三年,我见过校长两次,这两次,校长的风格给我留下了深…

开源50万行代码,百亿广告分成,百度智能小程序能成吗?
作者 | 非主流出品 | AI科技大本营终于,BAT 在小程序的赛道上展开了激战,而这一场战争得到了百度前所未有的重视。9 月 4 日,百度总裁张亚勤称拉动百度业务的“新四小龙”——智能小程序、信息流、短视频/小视频以及百度云。紧接着࿰…

接近WinHEC 2008
第一次听说windows硬件工程大会还以为微软要讲她出的硬件的一个技术交流大会,后来才了解到是微软公司面向个人电脑终端、服务器、硬件设备以及驱动程序的最具前瞻性的全球硬件技术信息盛会。而不是讲硬件本身,是与硬件相关的软件产品。今年是第17届WinHE…

加深C# 中字符串前加@符号理解以及使用~~
先看代码(以下代码使用在C#,环境ASP.NET): protectedvoidPage_Load(objectsender, EventArgs e) { test1("\a"); test1("\a"); test2("\a"); test2("\a"); test…

鸿蒙系统首批更新机器,鸿蒙系统升级名单
【鸿蒙系统升级名单】华为的鸿蒙系统算是早早放出消息的重量级产品,国产OS的名号也吸引了不少小伙伴的注意。很多朋友都想体验传闻已久的鸿蒙操作系统,但也担心自己的手机无法支持。那么,鸿蒙操作系统的升级名单到底有哪些呢机器呢?下面就让…

公开课报名 | 基于自定义模板的OCR结果的结构化处理技术
随着行业的发展和技术的成熟,文字识别(OCR)目前已经应用到了多个行业中,比如物流行业快递包裹的分拣,金融行业的支票单据识别输入,交通领域中的车牌识别,以及日常生活中的卡证、票据识别等等。O…

产生所有排列---旋转法------2013年1月22日
我觉得这是一个很巧秒的算法。思路非常直接,从代码里可以很容易看出来,再单步调试查看set数组的值就可以很清楚地明白算法的过程。代码如下:1 #include <stdio.h>2 #define MAX 10003 4 int n3; //the number of set element5 int set[MAX]{1,2,3…

VS Code 正在统治代码编辑器领地!
出品:CSDN(ID:CSDNnews)【CSDN编者按】代码编辑器之于程序员的重要性不言而喻。长久以来,Vim、Emacs等老牌编辑器一直占据着举足轻重的地位,但是近年来情况似乎发生了变化。根据软件工程师招聘网站Tripleby…

Linux主辅DNS数据不同步故障排除
Linux主辅dns数据不同步故障排除欢迎使用微信关注“云运维联盟”公众号,第一时间了解本博客动态!在互联网中,我们知道任何一台提供应用服务的主机(例如:HTTP、FTP等)都有它一个便于记忆Domain Name…

c语言贝叶斯分类,基于朴素贝叶斯分类器的文本分类算法(C语言)
基于朴素贝叶斯分类器的文本分类算法(C语言)基于朴素贝叶斯分类器的文本分类算法(C语言).txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了。他只是比对方更珍惜这份感情。#include #include #include //_getcwd(), _chdir()#include…

开源项目哪家强?Github年终各大排行榜超级盘点(内附开源项目学习资源)
整理 | Jane出品 | AI科技大本营【导语】提到开源项目,2018 年注定是不平凡的一年。据 Octoverse 报告数据,仅在 2018 年,Github 上的新用户就比过去六年的用户总数还要多 ,存储库数量近一亿,这些增长都要归功于开源社…

给现有MVC项目增加Web API支持
在MVC4中自带了Web API不再需要从Nuget中下载。 Step1:增加System.Web.Http,System.Web.Http.WebHost,System.Net.Http三个程序集的引用,都是4.0版本; Step2:增加路由,默认的路由代码如下 route…

word自动消除html标签,清理Word生成HTML的冗余;清理与清除HTML标签
众所周知,当直接将word中的内容复制到网页上时,会产生很多冗余代码;而现在,在线编辑器又很普遍;就包括,现在用的百度空间的这个文本编辑器,如果直接从WORD中写好的文章复制进来,本来…

开头轰轰烈烈,结局冷冷清清
开头轰轰烈烈,结局冷冷清清转载于:https://blog.51cto.com/xiaomage/115649

C# SQLiteHelper类似SqlHelper类实现存取Sqlite数据库
这个类不是我实现的,原文在这里,我修改了原文中分析sql语句参数的方法,将方法名修改为AttachParameters,将其修饰符修改为private,并直接传递command到这个方法,直接绑定参数到comand。修改后的代码如下 SQ…

Skype for Business Server 2015-03-后端服务器-0-准备
1. 规划-拓朴图 2. 规划-服务器 3. 准备-软件 Sql Server 2014: cn_sql_server_2014_enterprise_edition_x64_dvd_3932882.iso Sql Server 2014 CU6: Cumulative update package 6 for SQL Server 2014 https://support.microsoft.com/en-us/kb/3031047 4. 准备-虚拟…

html文档使用,使用提供 HTML 文档的过程
使用提供 HTML 文档的过程通常,编写一个可处理发送给特定服务的请求的过程是最简单的方式。这样的过程将返回一个 Web 页。或者,该过程也可接受作为 URL 的一部分进行传递的参数以对其输出进行自定义。但以下示例要简单很多。它例示了服务可以简单到什么…