通配符生成方法及装置与流程

文档序号:29699651发布日期:2022-04-16 14:02阅读:149来源:国知局
通配符生成方法及装置与流程

1.本发明涉及一种通配符生成方法及装置,具体涉及应用于实测实量领域中工程图中字符串的通配符生成方法及装置。


背景技术:

2.建设工程实测实量是根据相关质量验收规范,把工程质量数据误差控制在国家住房建设规范允许范围内的一种方法。此项工作的开展能够更好地促进项目做好实体质量工作。通过建立产品实体质量实测实量体系并系统实施的方式,客观真实反映项目各阶段的工程质量水平,促进实体质量的实时改进和持续提高,进而达到实体质量一次性合格的目标。因此,土建的实测实量体系作为中国建筑市场的质量控制重要组成部分,正在建筑市场中发挥着重大的作用,已经成为建筑工程质量保证的硬性指标。
3.实测实量需要测量的指标很多,主要有:墙面的平整度、垂直度、空鼓和开裂、天花板以及地面的平行度极差、卫生间防水、窗口塞缝和打胶、门洞口尺寸、窗口的大小头、插座面板的高度等。这些指标在数字化后会形成大量的字符串。
4.现有技术中,为了快速筛选、查找字符串,通常会使用通配符,根据通配符判断字符串是否与其匹配,而建立通配符的过程通常为人工判断并手动输入。而人工手动建立通配符存在弊端,人工通过观察字符串的相同与不同之处从而建立字符串,往往会存在遗漏或是考虑不完整的情况,且对于大量的目标字符串,人工判断很难对所有字符提取出完全正确的通配符。无法在快速建立通配符的同时,保证通配符的准确性。


技术实现要素:

5.本发明要解决的技术问题是为了克服现有技术中通配符的获取效率低,通配符获取后准确率低的缺陷,提供一种能够获取图纸中的字符串,获取字符串的通配符,通过通配符快速提取所需字符串,为用户提供便利,提高工作效率的通配符生成方法及装置。
6.本发明是通过下述技术方案来解决上述技术问题:
7.一种通配符生成方法,所述通配符生成方法包括:
8.获取一字符串集合,所述字符串集合中至少包括2个字符串;
9.将所述字符串集合划分为至少1个字符串组合,每个字符串组合中至少包括2个字符串;
10.对于一个字符串组合,获取字符串组合中字符串之间的全部相同字符,根据相同字符的起始、结束位置以及字符长度生成字符串组合的通配符;
11.对于一个通配符,获取字符串集合中与所述通配符匹配的全部字符串作为与所述通配符匹配的匹配集合;
12.以预设规则合并通配符,所述预设规则为对于任意两个通配符,若第一通配符的匹配集合是第二通配符的匹配集合的子集,则舍弃第一通配符;
13.获取合并后的通配符作为所述字符串集合的通配符组合。
14.较佳地,所述通配符生成方法包括:
15.获取一cad文件中目标图层的全部字符串作为所述字符串合集;
16.对字符串合集中的字符串两两组合以生成字符串组合,每一字符串组合包括2个字符串。
17.较佳地,所述通配符生成方法包括:
18.获取字符串组合的全部通配符;
19.判断全部通配符是否相同,若否则舍弃字符串组合的通配符并记录无法获取通配符的字符串。
20.较佳地,所述通配符生成方法包括:
21.对于每一通配符,将通配符按相同特征利用匹配符号进行分割;
22.对于一个通配符,遍历字符串集合,将每个字符串根据通配符进行分割并判断字符串结构是否与通配符结构一致,若是则将字符串匹配至通配符的匹配集合中;
23.获取与全部通配符匹配失败的字符串。
24.较佳地,所述获取合并后的通配符作为所述字符串集合的通配符组合,包括:
25.判断匹配结果与所述匹配失败的字符串的合集是否为字符串集合,若是则以目标子集作为字符串集合的通配符组合,其中所述目标自己为通配符组合的子集,所述匹配结果为利用目标子集在字符串集合进行匹配的匹配结果。
26.较佳地,所述获取合并后的通配符作为所述字符串集合的通配符组合,之后包括:
27.利用通配符组合在字符串集合进行匹配以获取通配符组合匹配结果;
28.判断通配符组合匹配结果与匹配失败的字符串的合集是否为字符串集合,若是则通配符组合验证成功。
29.本发明还提供一种通配符生成装置,所述通配符生成装置包括一获取模块、一划分模块、一生成模块、一合并模块以及一处理模块,
30.所述获取模块用于获取一字符串集合,所述字符串集合中至少包括2个字符串;
31.所述划分模块用于将所述字符串集合划分为至少1个字符串组合,每个字符串组合中至少包括2个字符串;
32.对于一个字符串组合,所述生成模块用于获取字符串组合中字符串之间的全部相同字符,根据相同字符的起始、结束位置以及字符长度生成字符串组合的通配符;
33.对于一个通配符,所述合并模块用于获取字符串集合中与所述通配符匹配的全部字符串作为与所述通配符匹配的匹配集合;
34.所述合并模块用于以预设规则合并通配符,所述预设规则为对于任意两个通配符,若第一通配符的匹配集合是第二通配符的匹配集合的子集,则舍弃第一通配符;
35.所述处理模块用于获取合并后的通配符作为所述字符串集合的通配符组合。
36.较佳地,
37.所述获取模块还用于获取一cad文件中目标图层的全部字符串作为所述字符串合集;
38.所述划分模块用于对字符串合集中的字符串两两组合以生成字符串组合,每一字符串组合包括2个字符串;
39.所述生成模块用于获取字符串组合的全部通配符;
40.所述生成模块还用于判断全部通配符是否相同,若否则舍弃字符串组合的通配符并记录无法获取通配符的字符串。
41.较佳地,所述通配符生成装置还包括一分割模块,
42.对于每一通配符,所述分割模块用于将通配符按相同特征利用匹配符号进行分割;
43.对于一个通配符,所述分割模块还用于遍历字符串集合,将每个字符串根据通配符进行分割并判断字符串结构是否与通配符结构一致,若是则将字符串匹配至通配符的匹配集合中;
44.所述处理模块还用于获取与全部通配符匹配失败的字符串。
45.较佳地,所述处理模块用于判断匹配结果与所述匹配失败的字符串的合集是否为字符串集合,若是则以目标子集作为字符串集合的通配符组合,其中所述目标自己为通配符组合的子集,所述匹配结果为利用目标子集在字符串集合进行匹配的匹配结果。
46.符合本领域常识的基础上,上述各优选条件,可任意组合,即得本发明各较佳实例。
47.本发明的积极进步效果在于:
48.本发明能够获取图纸中的字符串,获取字符串的通配符,通过通配符快速提取所需字符串,为用户提供便利,提高工作效率。
附图说明
49.图1为本发明实施例1的通配符生成方法的流程图。
50.图2为本发明实施例1的字符串集合及字符串组合的结构示意图。
51.图3为本发明实施例1的通配符的结构示意图。
具体实施方式
52.下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。
53.实施例1
54.本实施例提供一种通配符生成装置,所述通配符生成装置包括一获取模块、一划分模块、一生成模块、一合并模块以及一处理模块。
55.所述获取模块用于获取一字符串集合,所述字符串集合中至少包括2个字符串;
56.所述划分模块用于将所述字符串集合划分为至少1个字符串组合,每个字符串组合中至少包括2个字符串;
57.对于一个字符串组合,所述生成模块用于获取字符串组合中字符串之间的全部相同字符,根据相同字符的起始、结束位置以及字符长度生成字符串组合的通配符;
58.对于一个通配符,所述合并模块用于获取字符串集合中与所述通配符匹配的全部字符串作为与所述通配符匹配的匹配集合;
59.所述合并模块用于以预设规则合并通配符,所述预设规则为对于任意两个通配符,若第一通配符的匹配集合是第二通配符的匹配集合的子集,则舍弃第一通配符;
60.所述处理模块用于获取合并后的通配符作为所述字符串集合的通配符组合。
61.进一步地,所述获取模块还用于获取一cad文件中目标图层的全部字符串作为所述字符串合集;
62.所述划分模块用于通过python itertools库的combinations算法对字符串合集中的字符串两两组合以生成字符串组合,每一字符串组合包括2个字符串;
63.所述生成模块用于通过python difflib库的get_matching_blocks算法获取字符串组合的全部通配符;
64.在本实施例中,字符串组合的获取利用python itertools库的combinations算法,但本技术的保护范围并不仅限于此,在此步骤中将字符串集合中的字符串组合出来的算法都落入本技术的保护范围。
65.同理,通配符的获取方法本实施例采用python difflib库的get_matching_blocks算法,但本技术的保护范围并不仅限于此。在此步骤中能够获取通配符的算法都落入本技术的保护范围。
66.所述生成模块还用于判断全部通配符是否相同,若否则舍弃字符串组合的通配符并记录无法获取通配符的字符串。
67.具体地,所述通配符生成装置还包括一分割模块。
68.对于每一通配符,所述分割模块用于将通配符按相同特征利用匹配符号进行分割;
69.对于一个通配符,所述分割模块还用于遍历字符串集合,将每个字符串根据通配符进行分割并判断字符串结构是否与通配符结构一致,若是则将字符串匹配至通配符的匹配集合中;
70.所述处理模块还用于获取与全部通配符匹配失败的字符串。
71.所述处理模块又用于判断匹配结果与所述匹配失败的字符串的合集是否为字符串集合,若是则以目标子集作为字符串集合的通配符组合,其中所述目标自己为通配符组合的子集,所述匹配结果为利用目标子集在字符串集合进行匹配的匹配结果。
72.参见图1,利用上述通配符生成装置,本实施例提供一种通配符生成方法,包括:
73.步骤100、获取一字符串集合,所述字符串集合中至少包括2个字符串;
74.步骤101、将所述字符串集合划分为至少1个字符串组合,每个字符串组合中至少包括2个字符串;
75.步骤102、对于一个字符串组合,获取字符串组合中字符串之间的全部相同字符,根据相同字符的起始、结束位置以及字符长度生成字符串组合的通配符;
76.步骤103、对于一个通配符,获取字符串集合中与所述通配符匹配的全部字符串作为与所述通配符匹配的匹配集合;
77.步骤104、以预设规则合并通配符,所述预设规则为对于任意两个通配符,若第一通配符的匹配集合是第二通配符的匹配集合的子集,则舍弃第一通配符;
78.步骤105、获取合并后的通配符作为所述字符串集合的通配符组合。
79.参见图2,本实施例获取字符串集合11,字符串集合中包括若干字符串111,将字符串集合划分为若干字符串组合12,每一祖父穿组合中包括两个字符串121。
80.具体地,步骤100前包括:获取一cad文件中目标图层的全部字符串作为所述字符串合集;
81.步骤101包括:通过python itertools库的combinations算法对字符串合集中的字符串两两组合以生成字符串组合,每一字符串组合包括2个字符串。
82.步骤102具体包括:
83.通过python difflib库的get_matching_blocks算法获取字符串组合的全部通配符;
84.判断全部通配符是否相同,若否则舍弃字符串组合的通配符并记录无法获取通配符的字符串。
85.参见图3,通过算法获取字符串组合12中字符串121的相同字符,其中a表示第一个字符串的相同字符起始位置,b表示第二字符串相同字符起始位置,size表示长度。
86.获取相同字符后,根据相同字符生成通配符。
87.举例来说,生成两个通配符不相同情况如下:
88.字符串1:window.$winlib2d$00000001
89.字符串2:vfdgh.window
90.相同部分:window
91.通过替换window为*生成两个通配符:
92.字符串1为*.$winlib2d$00000001
93.字符串2为vfdgh.*
94.两个通配符结果并不相同,所以舍弃。
95.进一步地,本实施例还能验证通配符匹配结果,具体可作用在步骤102和103之间,所述通配符生成方法包括:
96.对于每一通配符,将通配符按相同特征利用匹配符号进行分割;
97.对于一个通配符,遍历字符串集合,将每个字符串根据通配符进行分割并判断字符串结构是否与通配符结构一致,若是则将字符串匹配至通配符的匹配集合中;
98.获取与全部通配符匹配失败的字符串。
99.字符串:vfdgh.window
100.通配符:*window
101.字符串分割结果:[

vfdgh.’,
‘’
](会包含一个空字符)
[0102]
根据通配符结构,window前应该包含任意字符串(*号在前),且window应该在字符串结尾,而字符串分割结果的空字符在后,符合通配符,加入匹配成功的字符串数组。
[0103]
字符串:window.$winlib2d$00000001
[0104]
通配符:*window
[0105]
字符串分割结果:[
‘’


.$winlib2d$00000001’]
[0106]
空字符串在前,说明结构并不相同,舍弃。
[0107]
上一步所求得的通配符数组,可能包含有重复或是互为子集的通配符结果。本实施例主要对这些多余结果进行合并,求出最小的通配符数组。
[0108]
具体实现方法为,计算通配符数组的全组合,n为通配符数组长度,m取[2,n],若全组合中的某一组通配符的匹配结果正好等于所需结果(除匹配失败的字符串以外),则将该组合作为通配符计算的结果。
[0109]
本发明简化通配符组合,步骤105包括:
[0110]
判断匹配结果与所述匹配失败的字符串的合集是否为字符串集合,若是则以目标子集作为字符串集合的通配符组合,其中所述目标自己为通配符组合的子集,所述匹配结果为利用目标子集在字符串集合进行匹配的匹配结果。
[0111]
上一步结果得到[通配符a,通配符b,通配符c,.....]
[0112]
通配符a匹配结果为:[a,b,c]
[0113]
通配符b匹配结果为:[a,b]
[0114]
通配符c匹配结果为:[c,f]
[0115]
......
[0116]
目标结果为[a,b,c,f,g]
[0117]
则上述通配符b可以省略。
[0118]
此步骤的目的为通过通配符的排列组合求出最短的通配符组合结果。
[0119]
本发明还包括验证通配符组合的方法,具体为:所述获取合并后的通配符作为所述字符串集合的通配符组合,之后包括:
[0120]
利用通配符组合在字符串集合进行匹配以获取通配符组合匹配结果;
[0121]
判断通配符组合匹配结果与匹配失败的字符串的合集是否为字符串集合,若是则通配符组合验证成功。
[0122]
利用本技术的通配符生成方法,处理cad图纸的具体方式可以为:
[0123]
在cad图纸中选择一些图层,利用本算法生成通配符,下次要选择这些图层就只需要直接通过通配符计算即可选择。如:
[0124]
door的图层名为:"door_fire.$dorlib2d$00000001"
[0125]
"door_fire.$dorlib2d$00000114"
[0126]
"door_fire.$dorlib2d$00000116"
[0127]
所有图层名大概有几百个;
[0128]
可求得通配符"door_fire.$dorlib2d$00000*"
[0129]
可从几百个图层中直接选择出所需的door图层
[0130]
直接通过人工选择可能会出现遗漏,且速度受到人工熟练度的限制。
[0131]
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1