如何从 pdf 图片中提取结构化数据

2017-12-19 22:07:11 +08:00
 daoremi
汉王 google vision api 其实在 pdf 图片到文本或者说带坐标的字符这一步已经做得很好了 但是要结合具体业务 具体的版面信息把这些字符重组成对业务有意义的 json 串 比如说简历的解析、名片的解析、身份证件、营业执照,甚至于说财务报表、企业年报、医疗病历等等。 我们目前在国内 700 家医院系统中已经有了应用 来个 demo 链接
http://alitest.clearofchina.com/report/index.html
4298 次点击
所在节点    分享创造
3 条回复
daoremi
2017-12-19 22:13:15 +08:00
当然 现在国内外也有成熟的解决方案 比如 datawatch pdf2xl pdftables tabelu 等等 但中文都支持不是很好
中文的话 目前都是自己做自己用吧 几大云市场上更是寥寥无几
imikay
2017-12-22 21:19:21 +08:00
一般的用 pdftotext 就可以把文字信息解析出来,增加-layout 选项可以保留文字在 PDF 里的布局。如果是 PDF 里嵌入的图片上的信息就只能使用 OCR 技术来识别了。
daoremi
2017-12-28 16:21:08 +08:00
@imikay pdftotext 只是其中一步 你看现在的简历解析 可以输出类似的
{
"errorcode": 0,
"errormessage": "cv_parse success",
"src_site": "",
"URL": "564df2116f3881046d98fafecdcb7faa.doc",
"cv_parse": {
"parser_time": "2016-04-12-12-01-43",
"job_objective": {
"status": {
"status_code": 1,
"status_msg": "在职,正在找工作"
},
"industries": "IT 服务(系统 /数据 /维护)、互联网 /电子商 务、计算机软件、网络游戏",
"expect_locations": [
{
"province": "北京",
"city": ""
}
],
"expect_worktype": "",
"expect_salary_upper": "15000",
"expect_salary": "10001-15000 元 /月",
"expect_titles": "软件工程师、软件研发工程师、高级软件工程师",
"expect_salary_floor": "10001"
},
"update_time": "",
"occupations": [
{
"title": "软件研发工程师",
"industry": "互联网 /电子商务",
"start_time": "2013/05",
"not_ended": 0,
"end_time": "2014/03",
"report_to": "技术总监",
"department": "技术研发部",
"underling_num": "12",
"desc": "企业性质:股份制企业\t 规模:500-999 人\t\n 职位月薪:8001-10000 元 /月\t\n 工作描述:\n 项目描述:开发新华网文章发布系统对应功能,优化数据库 sql,提高系统处理速度。为新华网手机客户端提供服务端支持。\n 软件环境:\n1、使用 maven 管理项目 jar 包版本,编译发布项目到私服供其他项目组调用\n2、使用 svn 管理代码\n3、使用 springmvc、hibernate、druid、dubbo、freemarker 等框架\n4、使用 memcache 作为缓存层方案\n5、使用 nginx 做 web 服务器,反向代理到应用服务器 tomcat\n 责任描述:\n 开发发布平台定制功能,如时间轴、相关文档、评论、话题等,优化数据结构,由于使用 hibernate 做数据持久层框架,延迟加载功能使列表展示引用对象时会再向数据库发多条 sql,为了效率使用主键 id 把关联对象先查出来,减少数据库操作提高效率,对于不常变化数据使用 memcache 做缓存,设置失效时间提高响应速度。\n 为手机客户端提供图集列表,新闻列表,评论等功能,为了提高效率,所有列表的初始请求的 json 数据都静态化发布到服务器上,与后台应用做查分,使用 nginx 反向代理到独立应用。\n 互联网抓取爬虫实现,抓取文章存到发布平台再加工,对爬虫比较感兴趣,学习使用 berkeleydb+bloomfilter 排重,jsoup 提取文章信息,spring 定时清理过期数据。",
"company": "新华网股份有限公司",
"predicted_job_function": "软件 /互联网开发 /系统集成"
},
{
"title": "java 研发工程师",
"industry": "互联网 /电子商务",
"start_time": "2012/07",
"not_ended": 0,
"end_time": "2013/04",
"report_to": "",
"department": "技术部 /商业服务部",
"underling_num": "",
"desc": "企业性质:民营\t 规模:100-499 人\t\n 职位月薪:8001-10000 元 /月\t\n 工作描述:\njava 后端开发工程师:\n 与前端同学协作完成项目的开发,对已上线的项目进行日常的维护、更新等操作,专注于业务逻辑的编写,提供接口调用。\n 熟悉了互联网开发的流程,由产品提交需求,分析项目需求,编写底层逻辑,与前端约定接口,测试环境提测,预发布连线上数据库,最终上线。\n 不断的学习充实自己,为了加快开发流程,学习使用 play 框架,为了实现大数据的排重,使用 berkeleydb+bloomfilter 排重,内部接口调用不再直接引入项目 jar 包,而是用 dubbo 提供内部接口,学习使我的的思路更加开阔。",
"company": "北京大杰致远信息技术有限公司大街网",
"predicted_job_function": ""
}
],
"skills": {
"skills": [
"oracle 数据库管理良好|6\nandroid 开发技术良好|6\njavaEE 良好|12"
],
"extract": [
"linux",
"java"
]
},
"educations": [
{
"major": "电子信息工程",
"degree": "本科",
"school_level": "",
"start_time": "2006/09",
"not_ended": 0,
"school": "北京信息科技大学",
"end_time": "2010/06"
}
],
"languages": {
"extract": [],
"language": [
"英语:读写能力良好听说能力良好"
]
},
"contact": {
"mobile": "13621XXXXXXX",
"qq": "",
"email": "XXXXXXXX@139.com"
},
"internships": [],
"certificates": {
"certifications": [],
"extract": []
},
"email_update_time": "",
"basic_info": {
"name": "XXXXX",
"id_number": "23948723942332324234",
"gender": "男",
"nation": "",
"birthyear": "1987",
"birthday": "1987-5",
"highest_degree": "硕士",
"work_experience": "2010",
"current_yearsalary": {
"upper": "",
"current_salary": "",
"floor": ""
},
"marriage_status": "已婚",
"location": {
"province": "北京",
"city": ""
}
},
"self_evaluate": "喜欢编程,兴趣驱动学习。\n 为人开朗乐观,好交朋友,可以和同事友好相处。",
"projects": [
{
"start_month": "01",
"start_year": "2013",
"name": "dell 加油站 philip 非凡人才社区",
"end_year": "2013",
"not_ended": 0,
"end_month": "04",
"post": "项目职务",
"project_responsibility": "项目职责",
"project_performance": "项目业绩",
"desc": "dell 加油站、philip 非凡人才社区\n 软件环境:springmvc+ibatis\n 硬件环境:\n 开发工具:\n 项目职责:\n 项目描述:这个项目之前已经独立完成过几个小型项目,对工作的理解已经从怎么实现这个逻辑,转变为怎样把部门里实施过的项目抽出来成为一个独立的模块,当能够保证代码的严谨性和健壮性后,怎样从复制粘贴、构建底层逻辑中脱离出来,完成一个高复用性,高可用性的独立模块,当有新项目的时候可以通过修改配置文件或参数的方式快速完成。\n 这 2 个项目(Dell 加油站 company.dajie.com/dell/indexphilip 非凡人才社区 company.dajie.com/philip/index)都在底层实现了一个高复用性的 feed 生成、展现模块,当用户出发一个 feed 行为的时候,可能会有多种展现形式,把不变的数据进行封装保存到数据库,在不同的展现调用工厂类实现对应的展现,可以实现快速搭建底层逻辑,当然底层的数据还要根据不同的用户行为进行不同的封装。\nphilip 非凡人才社区这个项目完成了一个交流专区的模块,新建了一个公共的 controller,专门处理交流专区,前台使用 freemarker 宏,可以通过传递不同的参数,实现各种项目的交流专区搭建,而且不光是在独立的交流页面,还可以通过不同的 type,区分是否在摸一个帖子下的交流,使这个模块既可以实现留言板的功能,也可以实现类似回帖的功能。\n"
},
{
"start_month": "07",
"start_year": "2012",
"name": "施耐德 mini 英飞项目",
"end_year": "2012",
"not_ended": 0,
"end_month": "12",
"post": "项目职务",
"project_responsibility": "项目职责",
"project_performance": "项目业绩",
"desc": "施耐德 mini 英飞项目"
}
]
},
"cv_id": "",
"cv_name": "564df2116f3881046d98fafecdcb7faa.doc",
"version": "20111225",
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/416116

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX