对step文件进行信息抽取算法
任务描述:给定一个step文件,对该文件的字符串进行信息抽取,结构化的组织文件描述模型的数据。形成抽象化数据结构,存入计算机数据库。并能按照有条理结构把这些数据展示出来。
信息抽取的结果描述:
1 数据结构:
以key-value键值对形式将step文件描述的信息抽取并组织起来。
具体的,在java当中使用javabean技术,以类的嵌套的方式实现这种数据结构。
2 结果展示:
将javabean转换成json并格式化打印出来,查看转化结果是否正确。
3 存储:
将javabean的实例化对象映射为mysql中的数据库表。
信息抽取的方法描述: 团队商讨,编写一套算法来实现对step文件的抽取。
step文件信息抽取算法(伪代码流程):
输入: step文件
输出: 键值对数据结构(字典、或hashtable、或hashmap、或javabean对象) 和 json格式打印输出
1 读取step文件,整个文件存为字符串s
2 删除s的开头的 "ISO-10303-21\n" 和最后的 "END-ISO-10303-21\n"
3 搜索s,将 “HEADER\n“ 和在此之后第一个“ENDSEC\n“ 中间的部分,存为字符串header
4 搜索s,将 "DATA\n" 和在此之后第一个"ENDSEC\n"中间的部分,存为字符串data
5 声明一个key-value类型变量step_root,用于存储整个模型信息
(下面开始处理header部分)
6 声明一个key-value类型变量header_root,用于存储header部分的结构化信息
7 将header字符串按照 行 \n进行切分 header.split("\n") , 将所有行存为一个数组(ArrayList) header_list, 每个元素是一行
8 for line in header_list: (对header中的每一行字符串line, 做如下操作)
9 对字符串line,搜索第一个左括号(, 将第一个左括号( 左侧的英文串作为key,
10 包含该左括号一直到最右侧分号之前的右括号)为止的字符串作为value
11 将key value 添加到header_root中
12 将"header"作为key, header_root作为value, 添加到step_root中
(下面是对data部分处理)
13 声明一个key-value类型变量data_root 用于存储data部分的结构化数据
14 将data按照一行\n进行切分 data.split("\n"), 并存入一个数组(ArrayList) data_list, 每个元素是一行
15 声明一个key-value类型变量 data_lines 用于映射实体 每一行的编号(实体表示) 和 对应属性
16 for line in data_list: (对于data中的每一行做如下操作:)
17 对line按照 = 进行切分, 左侧 #数字 作为key, 右侧去掉; 作为value
18 将key value 添加到data_lines 当中
19 while data_lines 不为空:
20 从data_lines中取出最先添加进来的键值对num-line,并在data_lines中删除这个键值对
21 对line部分搜索第一个左括号(,第一个左括号左侧部分的英文串作为key
22 第一个左括号和最后一个右括号之间的字符串存为临时字符串tmp
23 声明一个可变类型数组list作为value, 稍后将值加入list
24 对tmp按照逗号,进行切分 tmp.split(",") 并把每一项存入list中
25 for cur in list: (拿出list的每一项cur进行检查:)
26 如果cur是能匹配成 #数字 的规则:
27 调用子算法 构造子实体 算法, 将cur和data_lines传入,拿到返回值res,
28 将list中的cur位置替换为res
29 将key,value加入到data_root中
30 将"data"作为key, data_root作为value,添加到step_root中
31 将step_root转换json字符串step_json
32 返回step_root 并 打印输出step_json
子算法: 构造子实体 算法(伪代码流程):
输入: 字符串cur, key-value类型 data_lines
输出: key-value类型 res
1 声明一个key-value类型变量res
2 在data_lines中用cur当作键来查找得到值tmp
3 从data_lines中删除这对键值对cur-tmp
4 对tmp搜索第一个出现左括号的位置,将第一个左括号左侧的英文串当做key
5 对tmp第一个左括号和最后一个右括号之间的字符串存为line
6 声明一个可变类型列表ArrayList变量list作为value,稍后加入元素
7 对line按照逗号,切分 line.split(",") 并把每一项加入list中
8 for s in list: 对list中的每一项做检查:
9 如果 s 能匹配 #数字 这种规则:
10 调用 构造子实体算法,传入s和data_lines, 拿到返回值res_tmp
11 将list中s对应的位置替换成res_tmp
12 将key,value添加到res当中
13 返回res
附上一段python实现的demo
def get_info(start, lines):
res = {}
tmp = lines[start]
lines.pop(start)
cut_position = tmp.find("(")
k, v = tmp[:cut_position], tmp[cut_position+1:-2].split(",")
for i, vv in enumerate(v):
v[i] = vv.strip()
if v[i].startswith("#"):
v[i] = get_info(v[i], lines)
res[k] = v
return res if __name__ == '__main__':
s = """
#1 = aa('',12,45,#2);
#2 = bb('',55, #3,33);
#3 = cc('', 234,jjj);
"""
lines = {} # 存放 #num 和右侧的映射关系
s = s.strip().split("\n")
for tmp in s:
tmp = tmp.split("=")
k = tmp[0].strip()
v = tmp[1].strip()
lines[k] = v
res = get_info("#1", lines)
print(res)
运行结果:
{'aa': ["''", '12', '45', {'bb': ["''", '55', {'cc': ["''", '234', 'jjj']}, '33']}]}
对step文件进行信息抽取算法的更多相关文章
- trie树信息抽取之中文数字抽取
这一章讲一下利用trie树对中文数字抽取的算法.trie树是一个非常有用的数据结构,可以应用于大部分文本信息抽取/转换之中,后续会开一个系列,对我在实践中摸索出来的各种抽取算法讲开来.比如中文时间抽取 ...
- 【开源】C#信息抽取系统【招募C#队友】
FDDC2018金融算法挑战赛02-A股上市公司公告信息抽取 更新时间 2018年7月11日 By 带着兔子去旅行 信息抽取是NLP里的一个实用内容.该工具的目标是打造一个泛用的自动信息抽取工具.使得 ...
- [APUE]系统数据文件与信息
一.口令文件 UNIX口令文件包含下表中的各个字段,这些字段包含在 由于历史原因,口令文件是/bin/passwd,而且是一个文本文件,每一行都包括了上表中的七个字段,字段之间用":&quo ...
- (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- ACL2016信息抽取与知识图谱相关论文掠影
实体关系推理与知识图谱补全 Unsupervised Person Slot Filling based on Graph Mining 作者:Dian Yu, Heng Ji 机构:Computer ...
- 百科知识 STEP文件如何打开
使用任何的主流三维设计软件Pro/E.UG.CATIA.Solidworks等等都可以直接打开. STEP文件是通用格式,但是在打开的时候不同软件会生成不同的文件,下面是Solidworks打开的效果 ...
- MP3文件ID3信息编辑器代码开源 - 开源研究系列文章
上次把磁性窗体的源码开源了,这次就开源另一个程序源码:MP3文件ID3信息编辑器.这个源码也比较简单,关键在于获取和写入MP3文件的这个ID3的信息即可. 这个操作信息编辑的就封装在MP3ID3.ba ...
- Tomcat下conf下server.xml的文件配置信息
Tomcat下conf下server.xml的文件配置信息,基本上不用做任何修改就可以使用,修改的地方就是host区域的一些配置,此文件设置端口为80. 注意:Tomcat配置文件中(即server. ...
- Android根据文件路径使用File类获取文件相关信息
Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...
随机推荐
- 怎么查看一个进程里fork多少个子进程
怎么查看一个进程里fork多少个子进程 怎么查看一个进程里fork多少个子进程 怎么查看一个进程里fork多少个子进程 ? ? ?
- BZOJ5509: [Tjoi2019]甲苯先生的滚榜
题解 开n个平衡树对每个AC数维护罚时,然后不同AC数用树状数组维护即可. 其实挺好写的...就是评测的时候评的巨久... #include <bits/stdc++.h> using n ...
- 在Xshell 运行angular 项目时,找不到node-sass模块,安装node-sass模块时,又出现权限问题
情景再现: 运行时的报错找不到node-sass模块 接着安装node-sass模块出现权限问题 解决方法:既然是权限问题,那么就给项目添加权限指令,在npm前面添加# sudo ,命令如下: 这样就 ...
- [Android] Android studio gradle 插件的版本号和 gradle 的版本号 的对应关系
[Android] Android studio gradle 插件的版本号和 gradle 的版本号 的对应关系 本博客地址: wukong1688 本文原文地址:https://www.cnblo ...
- 全部文章> Maven
Maven 原 Maven中<resources>标签详解 &nbsp;&nbsp;&nbsp;&nbsp;& ...
- HNOI做题记录
算是--咕完了? 2013.2014的就咕了吧,年代太久远了,并且要做的题还有那么多-- LOJ #2112. 「HNOI2015」亚瑟王 发现打出的概率只和被经过几次有关. 于是\(dp_{i,j} ...
- jmeter通过cookie获取图片验证码实现登录2
在登录时有一张图片验证码,需要获取验证码用于后续登录,见图 1.找到图片验证码接口写入jmeter 2.正则表达式提取cookie 3.Fiddler抓取登录成功的响应cookie,并设置成全局 4. ...
- 【POJ1426】Find The Multiple
本题传送门 本题知识点:深度优先搜索 | 宽度优先搜索 题意很简单,让我们找一个只有1和0组成的十位数是n的倍数的数. 这题一开始吓到我了--因为Output里说输出的长度最长不超过100位???那是 ...
- player: 初始化分析
//1. //cocos 程序开始运行时执行的函数 bool AppDelegate::applicationDidFinishLaunching() { // initialize director ...
- HustOJ二次开发之修改相关Logo
比如将如图中的HUSTOJ进行修改: 在Linux上修改,通过关键字搜索,会获取如下两个重要文件,找到都有的文字进行修改即可: grep -rn "HUSTOJ" * cd /ho ...