php抓取图片进行内容提取解析,文字性pdf进行内容文字提取解析

2018年7月7日18:52:17

 php是用纯算法,自己是提取图片内容不是不行,可以但是优化起来很麻烦还得设计学习库,去矫正数据的正确率

对于大多数项目来说,如果不是做ocr服务,就不必要做需求工具或者接口

一,

先说工具 tesseract-ocr/tesseract 目前没有时间测试,全套东西,学习难度不大,需要的训练数据,支持多国语言

https://github.com/ShuiPingYang/tesseract-ocr-for-php

官方网站 http://tesseract-ocr.repairfaq.org

整一套到实际项目起码的一个月差不多,成熟的还得几个月的线上数据训练,差不多就OK了

 

二,

去购买其他成熟的平台的api,目前测试过的百度的图片识别api,通用文字高精度版,测试过几张稍复杂的图片还不错,返回的不是纯text

返回的是数组,还行,对于不规则的表格,文本后面再说处理方法,

我现在项目的使用的就是这个,官网http://ai.baidu.com/  500/天 是免费的,方便测试

还有一个就是https://ai.qq.com/ 腾讯的 这个注册了但是还没有测试,

当然还有阿里云的,但是也属于没测试过,

都有各种语言的demo包

提取的百度api的demo

 

/*
     * 百度OCR
     * $data 传进来是图片的二进制数据
     * $type = 1 通用文字识别 50000次/天免费 
     * $type = 2 通用文字识别(高精度)500次/天免费
     * $type = 3 网络图片文字识别 500次/天免费
     * $type = 4 身份证识别 500次/天免费
     * $type = 5 银行卡识别 500次/天免费
     * 
     * 说明 通用文字识别(高精度)识别度可以建议使用这个
     */

    public static function baidu_ai($image = '', $type = 2) {
        if (empty($image)) {
            throw new \Exception('图片二进制数据不能为空');
        }

        $AppID = '';
        $API_Key = '';
        $Secret_Key = '';

        if ($type == 1) {
//            通用文字识别
            $url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic';
        } elseif ($type == 2) {
            //通用文字识别(高精度版
            $url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic';
        } elseif ($type == 3) {
            //网络图片文字识别
            $url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/webimage';
        } elseif ($type == 4) {
            //身份证识别
            $url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/idcard';
        } elseif ($type == 5) {
            //银行卡识别
            $url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/bankcard';
        } else {
            throw new \Exception('$type 类型错误');
        }
        //获取token 有效时长30天,存redis
        $baidu_key = 'BAIDU_TOKET';
        if (Redis::ttl($baidu_key) < 360) {
            $data['grant_type'] = 'client_credentials';
            $data['client_id'] = $API_Key;
            $data['client_secret'] = $Secret_Key;
            $access_token_url = 'https://aip.baidubce.com/oauth/2.0/token';
            $result = self::post($access_token_url, $data);
            if ($result['code'] != 200) {
                throw new \Exception('授权出错');
            }

            Redis::set($baidu_key, $result['content']);
            Redis::expire($baidu_key, 29 * 24 * 3600);
        }
        $baidu_token = Redis::get($baidu_key);
        $baidu_token = json_decode($baidu_token, true);

        $access_token = $baidu_token['access_token'];

        $request_data['image'] = base64_encode($image);
        $request_url = $url . "?access_token={$access_token}&aipSdk=php&aipSdkVersion=2_2_2";
        $data_result = self::post($request_url, $request_data);
        if ($data_result['code'] != 200) {
            throw new \Exception('接口请求出错');
        }
        return $data_result['content'];
    }

    public static function post($url = '', $data = [], $headers = []) {
        if (empty($url) || empty($data)) {
            throw new \Exception('请求URL和数据都不能为空');
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_POSTFIELDS, is_array($data) ? http_build_query($data) : $data);
        curl_setopt($ch, CURLOPT_TIMEOUT_MS, 60000);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 60000);
        $content = curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        if ($code === 0) {
            throw new \Exception(curl_error($ch));
        }

        curl_close($ch);
        return array(
            'code' => $code,
            'content' => $content,
        );
    }

 

 

三,

纯算法提取,算了

 

pdf解析内容

目前解析文字性pdf的php,效果还不错,但是解析出来是纯文本,是不规则数据,

https://github.com/smalot/pdfparser  php的库

文字识别率和效率都还不错

项目demo代码

 

composer require smalot/pdfparser

 

use Smalot\PdfParser\Parser;


public static function parsing_pdf() {
 $parser = new Parser();
        $pdf = $parser->parseFile('http://www.yafco.com.hk/asp_bin/newimg/1523872385.pdf');
//        pp($pdf);
        $text = $pdf->getText();
        $result = json_encode($text, JSON_UNESCAPED_UNICODE);
}

 

 

图片性的pdf更麻烦,还得切成一页的图片然后再去ocr

 

 

说点数据提取的一点点心得

 比如我获取某些网站发布的pdf文件进行部分数据的提取

首先我建议提取的pdf原始文本,进行json吧制表符转换成实体,记住不要把中文不要转码

json_encode( '中文', JSON_UNESCAPED_UNICODE );

利用制表符,\t\n   \t   等作为分隔符,然后就是肉眼看到貌似很规则的pdf格式

其实解析完,你会发现一点都不规则,如果你没处理过,你会使用分割完的数组进行key的偏移进行定位你需要的位置的文本

但是,你不能使用不可穷尽的匹配位置的去获取数据

所以利用一点小方法就可以轻松获取数据,而且也不用写得极其的多的代码去匹配数据位置

方法1:

比如你的pdf文件数据大致的位置都是固定,但是解析出来的文本不规则的,可以进行数据块进行分割成一块一块的,如果你需要某块 的一部分数据,你就直接写稍微多3-4个

方法,去匹配位置就ok了,就不用去全文的匹配位置,麻烦少了很多,原则就是大块文本分小块,分块分次处理,进行全局匹配位置太麻烦,而且全局匹配可能你都没办法对复杂一点的pdf无法处理

方法2:

使用nlp接口去分析文本,百度ai的文本分析说使用只是把各种算法实现了,提供了接口,但是不是提供完整的功能,比如文本块分析

腾讯ai 也提供了。但是最大字符只有1024个字符,所以就直接放弃了,一页文本经常好几千个字,基本无实用性,如果你有小块文本需要提取的可以试试这个接口

方法3:

hadoop,但是貌似也没有直接数据清洗和数据提取的工具,如果你需要进行很多的数据的分析,还是得上这个生态

 

本文还会时不时继续更新

转载于:https://www.cnblogs.com/zx-admin/p/9263212.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
新版知道系统说明(免费版) 原版功能基础上的升级 结构功能:   1.       改善模板,页面更清新明了 2.       增加行业,企业,政府针对问题功能,可以自行拆装!(详情见后面) 3.       增加热点话题集体提问功能,后台可以控制 4.       修改以前版本页面板块显示控制功能 5.       全面提升搜索功能   提问功能:   1.       提问更人化,在提问前预先搜索相关问题,避免同类问题反复出现; 2.       优化提问时候选择分类的可操作; 3.       自动从标题提取标签; 4.       在三大专家问答功能模块提问还可以上传图片; 5.       用户在三大专家问答功能模块提问可以得到更专业更完善的解答 6.       增加敏感文字过滤功能; 回答功能:   1.       提升回答问题的方便度; 2.       任何人都可以回答问题; 3.       回答后问题后,在问题未结束时候可以修改回答内容; 显示功能:   1.       首页,列表,普通问题详细页面的部分板块可以自行拆装; 2.       搜索栏更明显大方; 3.       发布问题按钮更明显更方便; 4.       提问有三,普通提问,话题提问相同在相同也米娜,三大模块提问在各自专用页面; 5.       三大模块入口样式可以在模板lib里修改; 6.       搜索内容显示更完美,有部分内容提示;如果搜索结果为空,给出了提问按钮; 7.       优化了用户信息显示页面; 8.       置顶问题特殊显示; 9.       首页所有类型的问题混排;显示内容有对应板块设置而定; 10.   问题详细页面增加相关问题显示,根据问题标签提取;   三大模块介绍********:   各个模块分别设置,开启或关闭。各个模块有各自独立的自定义分类,每个分类可以设置对应的管理员(删除,置顶,取消置顶,收集问题,政府模块还有问题上报功能,需后台设置); 有自己独立的功能页面。 行业模块:   1.       独立问答,区别于普通问答,采取定位提问(对某一个人提问); 2.       行业问题独立分类显示,独立分专家显示 3.       采用集成文件统一数据处理,模板修改更方便; 4.       总体思想,提问更专业,回答更权威,知识更全面。 5.       在模板文件里lib文件夹下修改:professional_model.php ,此文件是入口文件   企业模块:   1.       独立问答,区别于普通问答,采取定位提问(对某一个人提问); 2.       企业问题独立分类显示,分职位显示; 3.       采用集成文件统一数据处理,模板修改更方便; 4.       总体思想,提问更贴切,回答更真实有效,讲解更具体; 5.       在模板文件里lib文件夹下修改:company_model.php ,此文件是入口文件       政府结构模块:   1.       独立问答,区别于普通问答,采取定位提问(对某一个人提问); 2.       政府问答也是独立页面显示,分栏目,分机构人员 3.       采用集成统一文件处理,模板修改更方便; 4.       总体思想,提问更方便,回答更权威,真实反映群众和政府的咨询问答关系; 5.       在模板文件里lib文件夹下修改:government_model.php ,此文件是入口文件 6.       特点:增加问题上报功能,在有2级政府都是用本套系统时:下级政府可以上报相关问题到上级政府的此套系统,由上级政府解答,直接下载到下级政府问题答案,需要站长设置对答接口(此处很方便)               程序设计的修改:   1.       搜索的优化,可以整个问题标题实施搜索; 2.       三大模块采用同一种数据处理方式,二次开发也方便;   后台功能:   1.       原有功能有优化和提升; 2.       问题和栏目的管理 3.       增加话题管理 4.       用户扩展管理:行业模块管理  企业模块管理 政府模块管理 注意:安装此问吧模块,必须先安装整站,否则无法安装 1.在整站目录新建一个问吧目录(如w8),然后把此目录的所有文件传到问吧目录里边. 2.修改问吧目录下php168目录及目录里的所有文件属为0777可写 3.然后在地址栏执行 http://你的整站网址/w8/install.php 就可全新安装问吧模块 /************特别说明**/ 本系统自带部分数据, 需要整站根目录下的 upload_files/w8;图片方可显示

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值