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

2015-12-08 17:56:33 +08:00
 summoon

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

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

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

6833 次点击
所在节点    PHP
17 条回复
inmyfree
2015-12-08 18:09:56 +08:00
可以,那你只能通过大量的 if else 了
summoon
2015-12-08 18:12:24 +08:00
@inmyfree 这个主意不错,不知道我们导师会不会打死我。。。
dxwwym
2015-12-08 18:17:55 +08:00
word 不如 excel , phpword 和 phpexcel 两个框架就可以
ChoateYao
2015-12-08 18:25:05 +08:00
当然可以,你可以封装成对象。
Moker
2015-12-08 18:28:33 +08:00
记得上次 有人发过一个在线简历解析的
word 比 excel 麻烦...只做过 excel 导入 excel 的话 有很多开源的可用
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
2015-12-08 19:15:03 +08:00
没个统一的序列化格式,这没法做啊
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
2015-12-09 01:06:04 +08:00
我研究过很久这个事情。 这里面包含两个难点,第一老格式的 doc 文件转换成文本文件。 第二,文本格式的简历格式化数据的提取。

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

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

反正我的经验是如果要实现 90%以上的文本简历的正确提取,搞个一年半载的应该可以实现。
sfree2005
2015-12-09 04:00:19 +08:00
其实我不是很明白这个需求本身,如果需要某些固定的信息,为什么不让用户填写表格呢?或者这只是导师让你练习使用某些库?
aksoft
2015-12-09 08:53:18 +08:00
word - xml - template
inmyfree
2015-12-09 08:55:38 +08:00
@sfree2005 如果你面试过一定数量的人话,你会发现简历除了 51,中华人才网等几个大网站模板外,还有一大堆各种各样的奇葩格式简历的,特别是 UI ,哎...
inmyfree
2015-12-09 08:59:15 +08:00
@summoon php 读取 word 不是难点,一些开源库就能实现,重点是在语义识别,如果你不做这个,那真只能是 if else 了
不,还有一张,就是你只是正对模板话的数据进行识别,好处是可以识别大部分,缺点是,不是模板的样本你不能录入,这样你要维护一个模板库就好了
突然想到人工识别验证码这个坑.....哈哈
xiamingchong
2015-12-09 09:16:25 +08:00
统一回答"能否用 php 实现 xxx 的功能?"之类的问题。
答案是: "可以,不谢"
sfree2005
2015-12-09 09:39:42 +08:00
@inmyfree 我是觉得用这样的方法收集数据始终会有疏漏,要花太多的时间考虑解决那些极少的情况(如果我上传的简历就是一张图片,还要动用 OCR 咧~~),还是让用户上传简历的同时填写表格吧, 大的招聘网站不是这样做吗?
kofj
2015-12-09 21:06:23 +08:00
summoon
2015-12-11 12:41:37 +08:00
@zjqzxc 现在是这么考虑的,就是担心简历格式不统一,如果格式统一的话就没有这么多麻烦了!

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

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

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

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

© 2021 V2EX