如何从 pdf 图片中提取结构化数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
daoremi
V2EX    分享创造

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

  •  1
     
  •   daoremi 201712-19 22:07:11 +08:00 4691 次点击
    这是一个创建于 2854 天前的主题,其中的信息可能已经有所发展或是发生改变。
    汉王 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     Solana     5421 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 07:41 PVG 15:41 LAX 00:41 JFK 03:41
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86