V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
summoon
V2EX  ›  PHP

能否用 PHP 实现 word 中的信息自动导入数据库?

  •  
  •   summoon · 2015-12-08 17:56:33 +08:00 · 6624 次点击
    这是一个创建于 3063 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求大概是这样,用户上传类似于个人简历的文件,导师希望后台能自动解析这个 word 文档,将其中的信息自动导入数据库……

    比如,简历里有:
    姓名:李二狗
    就可以在数据库的'name'字段自动插入数据:李二狗

    这个功能可以实现么?
    最好不要涉及到语义识别?╰( ̄▽ ̄)╮
    谢谢各位大大~Orz

    第 1 条附言  ·  2015-12-11 12:46:00 +08:00
    第一次在 V2 发帖没想到得到这么多回复,蟹蟹大家~超感动~

    我知道 excel 导入 php 有现成的框架和代码,这个我查过了,比较容易弄,但是这边要求是 word 。。。
    然后这边现在最担心的问题就是 word 格式不统一的问题。。。
    让我再研究研究。。。再次感谢大家~
    17 条回复    2015-12-11 12:41:37 +08:00
    inmyfree
        1
    inmyfree  
       2015-12-08 18:09:56 +08:00
    可以,那你只能通过大量的 if else 了
    summoon
        2
    summoon  
    OP
       2015-12-08 18:12:24 +08:00
    @inmyfree 这个主意不错,不知道我们导师会不会打死我。。。
    dxwwym
        3
    dxwwym  
       2015-12-08 18:17:55 +08:00 via iPhone
    word 不如 excel , phpword 和 phpexcel 两个框架就可以
    ChoateYao
        4
    ChoateYao  
       2015-12-08 18:25:05 +08:00
    当然可以,你可以封装成对象。
    Moker
        5
    Moker  
       2015-12-08 18:28:33 +08:00
    记得上次 有人发过一个在线简历解析的
    word 比 excel 麻烦...只做过 excel 导入 excel 的话 有很多开源的可用
    zjqzxc
        6
    zjqzxc  
       2015-12-08 18:48:33 +08:00
    理论上能。通过开源库把 word 文件读出来,然后慢慢匹配。。
    实际上有点问题,如果写在表格里面,姓名:李二狗 有可能是横着写(同行不同列),也有可能是竖着写(同列不同行),读取的时候需要尝试判断。
    “姓名”有时候并不一定是姓名,它有可能是“姓(空格)名”,“姓(俩空格)名”,本来是为了打印出来好看,恩,你考虑处理一下吧。
    “电子邮箱”这个项目有 N 种写法:邮箱,电子邮箱, mail , email ,以及其他可能看起来合理但我没想到的,匹配一下吧。
    万一某些简历模板在排版上有问题或者说为了照顾输出好看,出现类似这样的情况<td>姓名</td><td>:</td><td>二狗</td>,希望楼主不要太崩溃哦
    有些简历上写“学校”“专业”,另有些简历上是“学校及专业”,望处理过程中加以重视。

    另外在姓名一栏,不排除有哥们名字连 gb18030 字符集中都没有然后简历姓名一栏放了张图片。

    楼主加油,估摸着你花 20%的时间就可以实现 80%的简历的自动化录入功能;剩下的 20%极端情况,可能需要额外 4 倍的时间来处理。
    ChiChou
        7
    ChiChou  
       2015-12-08 19:15:03 +08:00
    没个统一的序列化格式,这没法做啊
    mko0okmko0
        8
    mko0okmko0  
       2015-12-08 19:29:49 +08:00
    一半做法参考:
    用 php 呼叫 word.exe 将来源 A.DOC(或 A.DOCX)另存成 A.XML
    然后记得 php 中要写结束 word.exe 的代码.不然每次转档都会多一个画面看不见的 word 在执行.
    接着你只要会处理 XML 就好了.word 能将 DOC(X)转成类似网页这样带有标签的 XML.
    接着你要找你要的文字分别对应哪些标签就可以了

    学过 XML 吗?
    建议用 Firstobject XML Editor 打开 A.XML.
    这个软体可以显示出 XML 的树状结构(左边).还有原始文字(右边).
    可以用搜寻文字先找你要的姓名或是电话的栏位值.
    对这个值按右键.这个软体选单有个 get path 这样的功能.
    然后显示在下方.这是个 XML 格式的路径.又称 XPATH.

    然后看 php 对 XML 的操作说明:
    http://php.net/manual/zh/refs.xml.php
    尤其是开档和 DOMXPath 这两个.

    基本概念就是
    $word = new COM("word.application") or die("Unable to instanciate Word"); //呼叫 word
    $word->Visible = 1;
    $word->Documents->Open('a.doc'); //来源 DOC 档
    $word->Documents[1]->SaveAs('a.xml',8);//8 是啥我忘了你查一下.
    //以下 3 行都是关闭 word.exe 用的.
    $word->Quit();
    $word = null;
    unset($word);

    //xml 操作
    $xdom=load('A.XML');//函数没写完整.看手册.这里意思一下.
    $str=xpath('//xxx/xxx/x',$xdom);//前面的 xxx 路径就是 xpath 大致上的样子.后面是你开档的$xdom.
    echo $str;//有看到文字剩下的就是存入你的目标了.看是资料库还是.TXT 都可以.
    longbill
        9
    longbill  
       2015-12-09 01:06:04 +08:00
    我研究过很久这个事情。 这里面包含两个难点,第一老格式的 doc 文件转换成文本文件。 第二,文本格式的简历格式化数据的提取。

    关于第一个,微软出了一份 word doc 文件二进制结构文档,可以参考。

    关于第二个,有很多研究生论文写半格式化文本数据提取。可以下来看看。

    反正我的经验是如果要实现 90%以上的文本简历的正确提取,搞个一年半载的应该可以实现。
    sfree2005
        10
    sfree2005  
       2015-12-09 04:00:19 +08:00 via Android
    其实我不是很明白这个需求本身,如果需要某些固定的信息,为什么不让用户填写表格呢?或者这只是导师让你练习使用某些库?
    aksoft
        11
    aksoft  
       2015-12-09 08:53:18 +08:00
    word - xml - template
    inmyfree
        12
    inmyfree  
       2015-12-09 08:55:38 +08:00
    @sfree2005 如果你面试过一定数量的人话,你会发现简历除了 51,中华人才网等几个大网站模板外,还有一大堆各种各样的奇葩格式简历的,特别是 UI ,哎...
    inmyfree
        13
    inmyfree  
       2015-12-09 08:59:15 +08:00
    @summoon php 读取 word 不是难点,一些开源库就能实现,重点是在语义识别,如果你不做这个,那真只能是 if else 了
    不,还有一张,就是你只是正对模板话的数据进行识别,好处是可以识别大部分,缺点是,不是模板的样本你不能录入,这样你要维护一个模板库就好了
    突然想到人工识别验证码这个坑.....哈哈
    xiamingchong
        14
    xiamingchong  
       2015-12-09 09:16:25 +08:00
    统一回答"能否用 php 实现 xxx 的功能?"之类的问题。
    答案是: "可以,不谢"
    sfree2005
        15
    sfree2005  
       2015-12-09 09:39:42 +08:00
    @inmyfree 我是觉得用这样的方法收集数据始终会有疏漏,要花太多的时间考虑解决那些极少的情况(如果我上传的简历就是一张图片,还要动用 OCR 咧~~),还是让用户上传简历的同时填写表格吧, 大的招聘网站不是这样做吗?
    kofj
        16
    kofj  
       2015-12-09 21:06:23 +08:00
    summoon
        17
    summoon  
    OP
       2015-12-11 12:41:37 +08:00
    @zjqzxc 现在是这么考虑的,就是担心简历格式不统一,如果格式统一的话就没有这么多麻烦了!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2987 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:14 · PVG 22:14 · LAX 07:14 · JFK 10:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.