V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
daoremi
V2EX  ›  分享创造

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

  •  1
     
  •   daoremi · 2017-12-19 22:07:11 +08:00 · 4293 次点击
    这是一个创建于 2529 天前的主题,其中的信息可能已经有所发展或是发生改变。
    汉王 google vision api 其实在 pdf 图片到文本或者说带坐标的字符这一步已经做得很好了 但是要结合具体业务 具体的版面信息把这些字符重组成对业务有意义的 json 串 比如说简历的解析、名片的解析、身份证件、营业执照,甚至于说财务报表、企业年报、医疗病历等等。 我们目前在国内 700 家医院系统中已经有了应用 来个 demo 链接
    http://alitest.clearofchina.com/report/index.html
    3 条回复    2017-12-28 16:21:08 +08:00
    daoremi
        1
    daoremi  
    OP
       2017-12-19 22:13:15 +08:00
    当然 现在国内外也有成熟的解决方案 比如 datawatch pdf2xl pdftables tabelu 等等 但中文都支持不是很好
    中文的话 目前都是自己做自己用吧 几大云市场上更是寥寥无几
    imikay
        2
    imikay  
       2017-12-22 21:19:21 +08:00
    一般的用 pdftotext 就可以把文字信息解析出来,增加-layout 选项可以保留文字在 PDF 里的布局。如果是 PDF 里嵌入的图片上的信息就只能使用 OCR 技术来识别了。
    daoremi
        3
    daoremi  
    OP
       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": "[email protected]"
    },
    "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",
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4300 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:07 · PVG 18:07 · LAX 02:07 · JFK 05:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.