对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
1 def get_info(start, lines): 2 res = {} 3 tmp = lines[start] 4 lines.pop(start) 5 cut_position = tmp.find("(") 6 k, v = tmp[:cut_position], tmp[cut_position+1:-2].split(",") 7 for i, vv in enumerate(v): 8 v[i] = vv.strip() 9 if v[i].startswith("#"): 10 v[i] = get_info(v[i], lines) 11 res[k] = v 12 return res 13 14 if __name__ == '__main__': 15 s = """ 16 #1 = aa('',12,45,#2); 17 #2 = bb('',55, #3,33); 18 #3 = cc('', 234,jjj); 19 """ 20 lines = {} # 存放 #num 和右侧的映射关系 21 s = s.strip().split("\n") 22 for tmp in s: 23 tmp = tmp.split("=") 24 k = tmp[0].strip() 25 v = tmp[1].strip() 26 lines[k] = v 27 res = get_info("#1", lines) 28 print(res)
运行结果:
{'aa': ["''", '12', '45', {'bb': ["''", '55', {'cc': ["''", '234', 'jjj']}, '33']}]}
转载于:https://www.cnblogs.com/Lin-Yi/p/11286566.html
对step文件进行信息抽取算法相关推荐
- 公开课|智能文本信息抽取算法的进阶与应用
一.什么是文本挖掘? 讨论文本挖掘之前,我们要先说一下数据挖掘的概念,因为文本挖掘是数据挖掘的一个分支.数据挖掘(Data Mining)指从大量的数据中通过算法搜索隐藏在其中信息的过程.而文本挖掘就 ...
- [信息抽取]基于ERNIE3.0的多对多信息抽取算法:属性关系抽取
[信息抽取]基于ERNIE3.0的多对多信息抽取算法:属性关系抽取 https://aistudio.baidu.com/aistudio/projectdetail/5143572?contribu ...
- NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等
NLP专栏简介:数据增强.智能标注.意图识别算法|多分类算法.文本信息抽取.多模态信息抽取.可解释性分析.性能调优.模型压缩算法等 专栏链接:NLP领域知识+项目+码源+方案设计 订阅本专栏你能获得什 ...
- PDF文档解析,公司公告信息抽取(附数据集)
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 目前,PDF已成为电子文档发行和数字化信息传播的一个标准,其广泛应用于学术界的交流以及各类公告 ...
- Web信息抽取——SWDE数据集简介(翻译)
摘要 SWDE(Structured Web Data Extraction, 结构化Web数据抽取)是用于结构化Web数据提取的大规模真实数据集,是从事网页信息抽取算法研究必须使用的一个数据集.这篇 ...
- 基于语义和规则的Web网页细粒度信息抽取方法
基于语义和规则的Web网页细粒度信息抽取方法 王晓飞11 (北京邮电大学模式识别实验室) 摘要:本文在利用语义和规则的基础上,提出了一个Web网页信息细粒度抽取的方法.方法首先,利用Web网页的结构和 ...
- 【PaddleOCR-kie】关键信息抽取1:使用VI-LayoutXLM模型推理预测(SER+RE)
背景:在训练自己数据集进行kie之前,想跑一下md里面的例程,但md教程内容混乱,而且同一个内容有多个手册,毕竟是多人合作的项目,可能是为了工程解耦,方便更新考虑--需要运行的模型和运行步骤散落在不用 ...
- 有关信息抽取的文章列表(1)
转自:http://blog.csdn.net/ictextr9/article/details/3727257 这里总结了近几年来,一些知名会议上有关信息抽取的文章,不断更新中. [1] Ru ...
- 网上信息抽取技术纵览
网上信息抽取技术纵览 (Information Extraction from World Wide Web-A Survey) Line Eikvil 原著 (1999.7) 陈鸿标 译 (2003 ...
最新文章
- linux lvm 逻辑卷 创建 扩容 缩减 删除
- 第二冲刺阶段个人博客7
- Randomize select algorithm 随机选择算法
- javaweb和ajax使用查询出来的数据做下拉菜单_区块链浏览器实用指南篇:利用链上数据把握减半行情...
- 23种设计模式之组合模式
- requirejs页面刷新失效js报错问题解决方案
- 高程 第7章函数表达式 7.1递归 7.2闭包
- Quartz2D简单绘制之矩形椭圆
- 河北工程大学c语言期末考试及答案,河北工程大学之数据结构c语言版期末考试复习试题...
- 使用VS进行工作流开发系列博客5-Developing Workflows in VS: Part 4 - Design and Bind Your Forms...
- express基本原理
- Web前端开发所用的调试工具
- 设计模式(13)——构建者模式(Builder)
- ubuntu Mac 上ssh保持会话连接
- Ubuntu20 运行不了网络助手NetAssist
- DELL linux 网卡驱动升级
- Vasp 石墨烯能带计算
- oracle字段名小写,oracle表名、字段名大小写问题。
- win10右键英特尔显卡控制面板不见了(如何打开英特尔® 显卡的控制面板 )
- 计算机打开远程桌面服务,如何开启Windows远程桌面服务 | 远程操作自己的电脑...
热门文章
- java.servlet js,调用servlet方法
- 汉明码---存储器校验(简单易懂详解)
- 2018北京ICPC H. Approximate Matching(AC自动机+DP)
- Educational Codeforces Round 52: D. Three Pieces(记忆化搜索)
- opencv 不同边缘检测算子效果比较
- [总结] 本人代表性博客总结
- 吴恩达神经网络和深度学习-学习笔记-2-激活函数
- python装饰器快速入门
- python数据存储系列教程——python操作sqlite数据库:连接、增删查改、指令执行
- Python pandas使用