CN111176656B - 一种复杂数据匹配方法及介质 - Google Patents
一种复杂数据匹配方法及介质 Download PDFInfo
- Publication number
- CN111176656B CN111176656B CN201911253731.6A CN201911253731A CN111176656B CN 111176656 B CN111176656 B CN 111176656B CN 201911253731 A CN201911253731 A CN 201911253731A CN 111176656 B CN111176656 B CN 111176656B
- Authority
- CN
- China
- Prior art keywords
- grammar
- node
- type
- nodes
- syntax tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Machine Translation (AREA)
Abstract
本发明公开了一种复杂数据匹配方法及介质,该方法包括将语法规则解析成语法树;将语法树进行缓存;将待匹配数据传入语法树进行匹配得到匹配结果。本发明利用多叉树结构解耦复杂数据之间的耦合关系,使得程序不需要一次处理所有业务逻辑,而只需要关注当前访问数据节点逻辑,将复杂的逻辑转变为多个简单逻辑的组合,从而极大的降低了业务复杂度。
Description
技术领域
本发明属于语法解析技术,具体为一种复杂数据匹配方法及介质。
背景技术
目前,针对复杂数据进行匹配的方法包括基于业务数据的向定制开发、利用基于Java语言的软件开发工具包的Java script计算引擎、利用Drools、URule 开源的决策引擎、利用EL表达式引擎完成数据匹配,上述方法各具特色,但仍存在一定的问题:
1、基于业务数据的向定制开发:
在数据结构简单、类型单一、稳定性高的业务场景下比较适合,但是对于当前项目数据结构复杂多变,数据量庞大的场景下,该方案无法满足场景要求的可扩展性、可维护性以及执行效率;
2、基于Java语言的软件开发工具包的Java script计算引擎:
Java script计算引擎是Java软件开发工具包自带的计算引擎,支持Java script的语法规则,学习、开发门槛低;但经过亿万级别的数据测试,发现其性能只有 Java的二分之一到三分之一之间,而且Java script语法对没有相关技术背景的业务方来说非常不友好;
3、Drools、URule开源的决策引擎:
Drools和URule是比较优秀开源的业务决策引擎,对复杂的业务场景可以扩展出丰富的策略规则;但是对两种框架做性能测试时发现性能在千万、亿万级数据性能比较低下,并且规则更倾向于业务规则,对业务方同样不友好;
4、FEL表达式引擎:
FEL表达式引擎是轻量高效的表达式计算引擎,并且在大数据量的测试中也有不错的表现;但是FEL表达式引擎支持表达式有限,并且扩展功能也不太适合当前的业务场景。
发明内容
本发明的目的在于提出了一种复杂数据匹配方法。
实现本发明目的的技术解决方案为:一种复杂数据匹配方法,具体步骤为:
将语法规则解析成语法树;
将语法树进行缓存;
将待匹配数据传入语法树进行匹配得到匹配结果。
优选地,所述语法规则为数据匹配规则。
优选地,将语法规则解析成语法树的具体方法为:
将语法规则表达式转换成字符数组;
依次递归解析字符数组并生成对应类型节点,直至叶子节点,当解析完成所有的叶子节点,结束语法树的解析过程。
优选地,解析字符数组的具体方法为:
从左向右解析字符数组,将字符与定义的不同类型字符标签进行匹配,如果匹配上,则分配该语法规则至该类型字符标签对应的自定义语法解析类生成对应语法类型节点。
优选地,所述语法类型节点包括分支类型节点、逻辑类型节点、关系类型节点、数学表达式类型节点。
优选地,所述语法类型节点预先设定为语法树的叉或节点。
优选地,所述叶子节点包括定义的不可在划分的操作符、参数编号、数学表达式节点。
优选地,将语法树进行缓存的具体方法为:
获取语法树;
根据语法编号判断缓存中是否存在语法编号对应的语法规则,如果不存在,则将语法树写入缓存;
如果存在,根据语法编号判断操作类型;
如果操作类型为在使用,则比较缓存中对应语法编号的语法规则的版本号,如果版本号不同则在缓存中更新该语法规则;
如果操作类型为废弃,则将该语法规则从缓存中删除。
优选地,将待匹配数据传入语法树进行匹配得到匹配结果的具体方法为:
从语法树的根节点开始访问语法树,当访问语法树的节点时,判断当前节点是否为叶子节点;
如果当前节点非叶子节点并且当前节点存在下级节点,则先向下递归匹配直至叶子节点;
根据匹配的节点类型调用对应的匹配方法,得到匹配结果,保存至当前节点。
本发明与现有技术相比,其显著优点为:本发明利用多叉树结构解耦复杂数据之间的耦合关系,使得程序不需要一次处理所有业务逻辑,而只需要关注当前访问数据节点逻辑,将复杂的逻辑转变为多个简单逻辑的组合,从而极大的降低了业务复杂度;
本发明提供可扩展语法规则方案,提升后期业务语法规则扩展性,可以通过本发明提供的解析和计算接口,自定义扩展语法规则,减少后期业务扩展工作量;
本发明采用缓存机制,将解析与计算分离,减少大数据量相同语法匹配时间,提升运算效率。
下面结合附图对本发明做进一步详细的描述。
附图说明
图1是解析语法树流程图。
图2是解析树示意图。
图3是缓存机制示意图。
图4是树状结构示意图。
图5是节点递归示意图。
具体实施方式
一种复杂数据匹配方法,具体步骤为:
将语法规则解析成语法树,所述语法规则即匹配规则;
在某些实施例中,将设定的语法规则表达式转换成字符数组;
从左向右解析字符数组,将字符与定义的不同类型字符标签进行匹配,如果与其中的某个类型标签匹配,则分配该语法规则至该类型标签对应的自定义语法解析类生成对应语法类型节点,所述语法类型节点预先设定为语法树的叉或节点;
按照此方法依次递归解析字符数组并生成对应类型节点,直至叶子节点,当所有的叶子节点解析完成,整个语法树的解析过程结束。
如图1所示,在某些实施例中,定义的语法规则表达式为:((1<2)&&(2<3)),本实施例中,将语法规则解析成语法树的具体过程为:
将语法规则转换为图1所示字符数组,依次从左向右读取字符,读取到左小括号‘(’时,根据定义的语法规则会找到对应的右小括号‘)’,交给分支语法解析类处理,将其定义为分支类型节点;
继续迭代解析“(1<2)&&(2<3)”,同样的找到“(1<2)”分支节点,操作符“&&”和“(2<3)”分支节点,发现“(1<2)&&(2<3)”满足“表达式&&表达式”的结果,交给逻辑解析类处理,定义(1<2)&&(2<3)为逻辑类型节点;
分别迭代解析“(1<2)”和“(2<3)”,发现1<2满足“表达式<、<=、>、>=、==表达式”其中的一种,则交给关系解析类处理,将其定义为关系类型节点,“(2<3)”同样流程;
继续迭代,到1、2、2、3数字,发现为数字类型即不可再划分的类型,则将其定义为叶子节点类型,并结束迭代;最终将这个语法规则表达式解析成如图 1的树状结构;
将语法树进行缓存。缓存过程避免语法树重复解析,特别在大数据量的情况下,重复解析尤为浪费性能,所以将解析好的语法树先刷入缓存,进行语法树计算时直接通过语法编号查询得到先前解析的语法树做计算;
如图3所示,在某些实施例中,周期地从数据库中获取配置的语法规则,根据语法编号判断缓存中是否存在语法编号对应的语法规则,如果不存在,则将语法规则写入缓存;
如果存在,根据语法编号判断操作类型,所述操作类型包含在使用、废弃等操作;
如果操作类型为在使用,则比较缓存中对应语法编号的语法规则的版本号,如果版本号不同则在缓存中更新该语法规则;
如果操作类型为废弃,则将该语法规则从缓存中删除;
将待匹配数据传入语法树进行匹配得到匹配结果;
如图4所示,在某些实施例中,具体匹配过程为:
从语法树的根节点开始访问语法树,当访问语法树的节点时,判断当前节点是否为叶子节点;
如果当前节点非叶子节点并且当前节点存在下级节点,则先向下递归匹配直至叶子节点,如图5所示;其中,所述叶子节点包括操作符、参数编号、数学表达式等定义的不可再划分的节点;
根据节点类型调用对应节点类型的匹配方法,得到匹配结果,保存至当前节点,其中,所述节点类型包括条件关系型、包含关系型、逻辑关系型、数学表达式类型等,其中叶子节点由于不可再划分所以结果值就是叶子节点语法规则表达式。
本发明采用语法树结构将业务规则与业务逻辑解耦合,实现业务规则可配置化,便于后期功能扩展和维护;
本发明的缓存机制,将解析和计算分离,减少重复解析带来的性能浪费;
本发明支持自定义的语法规则,对复杂数据逻辑有很好的支持,只需要添加新语法树类型节点,新增解析计算方法,便可实现语法规则扩展。
本发明实现了业务与规则的解耦,将复杂的业务逻辑抽象成容易理解的业务规则,使得不需要根据复杂的数据开发业务逻辑,对业务逻辑而言具有轻量和低入侵性,极大减少后期的开发和维护成本;
本发明中的树状结构减少了语法规则之间的耦合,将复杂业务逻辑之前的关系转换成父子节点关系,在语法树运算过程中,不需要关注整个语法规则,只需要进行当前节点的语法运算,实际就是将复杂的业务规则转换成多个简单规则组合,降低业务复杂度,使得后期扩展功能更加便捷;
本发明在运算效率得到了提升,本地双核机器可以达到每秒1000~3000次运算,运算效率受语法规则复杂度影响,在实际生产环境速度会更快,结合分布式框架满足当前项目在千万至亿级别数据量级的场景需求。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可实现上述实施例中任意的复杂数据匹配方法。
本发明的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子 (非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:
无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、 Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(LAN)或广域网(WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
实施例
本实施例中,针对业务逻辑有如下规则:
if(_100_<10){(10+20)/2}else if(if(_100_>20){_100_==30}else{_100_==40}){10+20}*(1+1) ;
其中,“_100_”表示参数变量,具体步骤为:
获取语法规则,通过解析引擎将该规则解析成语法树,解析过程如下:
解析引擎将语法规则转换成字符数组,从左自右解析,当解析到“if”标志符,截取整个条件字符数组,将条件语法规则分配给条件解析器解析,解析器创建条件节点;
条件解析器解析时,判断条件体“_100_<10”为关系型语法,交给关系解析器解析,关系解析器完成返回关系节点;条件解析器将关系节点添加至当前节点的子节点中;按此依次解析,最终得到语法规则的完整多叉树状结构,如图2所示;
将解析完成的树状结构缓存置内存中,并返回该语法规则的语法编号;
将待匹配数据传入语法树进行匹配,得到匹配结果,具体匹配过程如下:
自语法树根节点向下递归访问子节点,判断非叶子节点并且当前节点存在子节点,则遍历当前节点的子节点,根据不同的节点类型调用节点类的匹配方法并返回结果值,递归访问直至遇到叶子节点;
例如示例中传入“_100_”变量对应值为5,则”_100_<10”关系节点返回值为true(真),条件节点类计算发现满足条件体,则进入方法体“(10+20)/2”,方法体“(10+20)/2”计算结果为15,则条件节点返回结果为15,而“(1+1)”对应的节点计算结果为2;而条件节点和数学公式节点的父节点为数学公式节点即 15*2,匹配最终结果的30,整个语法树匹配过程结束。
Claims (8)
1.一种复杂数据匹配方法,其特征在于,具体步骤为:
将语法规则解析成语法树;
将语法树进行缓存,具体方法为:
获取语法树;
根据语法编号判断缓存中是否存在语法编号对应的语法规则,如果不存在,则将语法树写入缓存;
如果存在,根据语法编号判断操作类型;
如果操作类型为在使用,则比较缓存中对应语法编号的语法规则的版本号,如果版本号不同则在缓存中更新该语法规则;
如果操作类型为废弃,则将该语法规则从缓存中删除;
将待匹配数据传入语法树进行匹配得到匹配结果,具体方法为:
从语法树的根节点开始访问语法树,当访问语法树的节点时,判断当前节点是否为叶子节点;
如果当前节点非叶子节点并且当前节点存在下级节点,则先向下递归匹配直至叶子节点;
根据匹配的节点类型调用对应的匹配方法,得到匹配结果,保存至当前节点。
2.根据权利要求1所述的复杂数据匹配方法,其特征在于,所述语法规则为数据匹配规则。
3.根据权利要求1所述的复杂数据匹配方法,其特征在于,将语法规则解析成语法树的具体方法为:
将语法规则表达式转换成字符数组;
依次递归解析字符数组并生成对应类型节点,直至叶子节点,当解析完成所有的叶子节点,结束语法树的解析过程。
4.根据权利要求3所述的复杂数据匹配方法,其特征在于,解析字符数组的具体方法为:
从左向右解析字符数组,将字符与定义的不同类型字符标签进行匹配,如果匹配上,则分配该语法规则至该类型字符标签对应的自定义语法解析类生成对应语法类型节点。
5.根据权利要求4所述的复杂数据匹配方法,其特征在于,所述语法类型节点包括分支类型节点、逻辑类型节点、关系类型节点、数学表达式类型节点。
6.根据权利要求4所述的复杂数据匹配方法,其特征在于,所述语法类型节点预先设定为语法树的叉或节点。
7.根据权利要求3所述的复杂数据匹配方法,其特征在于,所述叶子节点包括定义的不可在划分的操作符、参数编号、数学表达式节点。
8.一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的复杂数据匹配方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911253731.6A CN111176656B (zh) | 2019-12-09 | 2019-12-09 | 一种复杂数据匹配方法及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911253731.6A CN111176656B (zh) | 2019-12-09 | 2019-12-09 | 一种复杂数据匹配方法及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111176656A CN111176656A (zh) | 2020-05-19 |
CN111176656B true CN111176656B (zh) | 2022-12-30 |
Family
ID=70655439
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911253731.6A Active CN111176656B (zh) | 2019-12-09 | 2019-12-09 | 一种复杂数据匹配方法及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111176656B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111767024A (zh) * | 2020-07-09 | 2020-10-13 | 北京猿力未来科技有限公司 | 一种面向简便运算的解答方法与装置 |
CN112069214A (zh) * | 2020-09-09 | 2020-12-11 | 北京字节跳动网络技术有限公司 | 规则处理方法、装置、设备及存储介质 |
CN111984247B (zh) * | 2020-09-11 | 2024-08-16 | 得到(天津)文化传播有限公司 | 一种业务处理方法、装置和电子设备 |
CN117038002B (zh) * | 2023-10-08 | 2024-02-13 | 之江实验室 | 一种药物评价研究中生成观察变量的方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103455476A (zh) * | 2012-05-29 | 2013-12-18 | 阿里巴巴集团控股有限公司 | 网络信息的处理方法和抽象语法树的建立方法及其装置 |
-
2019
- 2019-12-09 CN CN201911253731.6A patent/CN111176656B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103455476A (zh) * | 2012-05-29 | 2013-12-18 | 阿里巴巴集团控股有限公司 | 网络信息的处理方法和抽象语法树的建立方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111176656A (zh) | 2020-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111176656B (zh) | 一种复杂数据匹配方法及介质 | |
US11146286B2 (en) | Compression of JavaScript object notation data using structure information | |
CN110502227B (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
CN108369591A (zh) | 用于缓存和参数化ir的系统和方法 | |
CN112988163B (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
CN111309751A (zh) | 大数据处理方法及装置 | |
US11573790B2 (en) | Generation of knowledge graphs based on repositories of code | |
CN116483850A (zh) | 数据处理方法、装置、设备以及介质 | |
CN115221191A (zh) | 一种基于数据湖的虚拟列构建方法以及数据查询方法 | |
CN115809063A (zh) | 一种存储过程编译方法、系统、电子设备和存储介质 | |
CN108932225B (zh) | 用于将自然语言需求转换成为语义建模语言语句的方法和系统 | |
KR101985309B1 (ko) | 최적화된 높이를 가지는 밸런스드 파스 트리를 생성하는 방법 | |
Ribeiro et al. | Transparent Interoperability Middleware between Data and Service Cloud Layers. | |
CN116955192A (zh) | 接口测试数据的管理、接口测试方法及装置、存储介质 | |
WO2023164294A1 (en) | Query splitter for an inverted index datastore | |
CN113391793B (zh) | 一种面向流处理的金融欺诈建模语言的处理方法及装置 | |
US10235224B2 (en) | Validation and parsing performance using subtree caching | |
CN114519071A (zh) | 规则匹配模型的生成方法、匹配方法、系统、设备和介质 | |
CN114003583A (zh) | 一种目标格式数据请求体的构建方法、装置、介质及设备 | |
US11960507B2 (en) | Hierarchical data | |
CN113378544A (zh) | 文本解析方法、文本数据获取方法、装置、介质及设备 | |
CN112988778A (zh) | 一种处理数据库查询脚本的方法和装置 | |
WO2024207609A1 (zh) | 从客户端-服务器架构到区块链架构的应用迁移方法 | |
CN112241258B (zh) | 用于易变数据结构程序验证的形状图生成方法及装置 | |
CN112925564B (zh) | 一种源代码的冗余导入类清理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |