Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容


Posted in Javascript onJune 17, 2017

前言

想要做全文搜索引擎,则需要将word/pdf等文档内容提取出来。对于pdf有xpdf等一些开源方案。

但Word文档的情况则会复杂一些。

提取PDF文本内容

XPDF是一个免费开源的软件,用于显示PDF文件,并可将pdf转换成文字图片等,同样支持Windows版。在Debian Linux上安装非常简单:

apt-get install xpdf

我们这里只使用pdftotext这个功能,直接输入可查看帮助:

root@raspberrypi:/var/www# pdftotext
pdftotext version 0.26.5
Copyright 2005-2014 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011 Glyph & Cog, LLC
Usage: pdftotext [options] <PDF-file> [<text-file>]
 -f <int>   : first page to convert
 -l <int>   : last page to convert
 -r <fp>   : resolution, in DPI (default is 72)
 -x <int>   : x-coordinate of the crop area top left corner
 -y <int>   : y-coordinate of the crop area top left corner
 -W <int>   : width of crop area in pixels (default is 0)
 -H <int>   : height of crop area in pixels (default is 0)
 -layout   : maintain original physical layout
 -fixed <fp>  : assume fixed-pitch (or tabular) text
 -raw    : keep strings in content stream order
 -htmlmeta   : generate a simple HTML file, including the meta information
 -enc <string>  : output text encoding name
 -listenc   : list available encodings
 -eol <string>  : output end-of-line convention (unix, dos, or mac)
 -nopgbrk   : don't insert page breaks between pages
 -bbox    : output bounding box for each word and page size to html. Sets -htmlmeta
 -opw <string>  : owner password (for encrypted files)
 -upw <string>  : user password (for encrypted files)
 -q    : don't print any messages or errors
 -v    : print copyright and version info
 -h    : print usage information
 -help    : print usage information
 --help   : print usage information
 -?    : print usage information

测试一下:

root@raspberrypi:/var/www# pdftotext onceai.pdf onceai.txt
root@raspberrypi:/var/www# cat onceai.txt 产品介绍 顽石智能科技(上海)有限公司
....

然后在node.js中使用 child_process直接调用此命令即可,pdftotext会将内容输出以文本文件中,可能需要多一些操作。具体代码略。

用antiword提取 .doc 的内容

我们这里使用了 antiword 开源软件,来提取word2003以前版本的内容,安装同样非常简单:

apt-get install antiword

查看帮助:

root@raspberrypi:/var/www# antiword
 Name: antiword
 Purpose: Display MS-Word files
 Author: (C) 1998-2005 Adri van Os
 Version: 0.37 (21 Oct 2005)
 Status: GNU General Public License
 Usage: antiword [switches] wordfile1 [wordfile2 ...]
 Switches: [-f|-t|-a papersize|-p papersize|-x dtd][-m mapping][-w #][-i #][-Ls]
  -f formatted text output
  -t text output (default)
  -a <paper size name> Adobe PDF output
  -p <paper size name> PostScript output
   paper size like: a4, letter or legal
  -x <dtd> XML output
   like: db (DocBook)
  -m <mapping> character mapping file
  -w <width> in characters of text output
  -i <level> image level (PostScript only)
  -L use landscape mode (PostScript only)
  -r Show removed text
  -s Show hidden (by Word) text

antiword直接将word内容输出到了console中:

root@raspberrypi:/var/www# antiword spec.doc

SYNC Mobile ? Ford APA
Project Number: DFYST
Requirements Specification

同样在node.js用child_process调用此命令即可。

解析提取.docx 的内容

对于 docx 文档来说,因基本身就是一个zip文件,只需要在node.js先将其解压,再解析 text.docx\word\document.xml 文件即可。

Github上也有些将docx解析成html的库,

如:

https://github.com/mwilliamson/mammoth.js 

https://github.com/lalalic/docx2html 

等。

总结

以上就是这文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
将CKfinder整合进CKEditor3.0的新方法
Jan 10 Javascript
ExtJS4 表格的嵌套 rowExpander应用
May 02 Javascript
jquery实现键盘左右翻页特效
Apr 30 Javascript
Jquery技巧(必须掌握)
Mar 16 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
May 10 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
Jul 08 Javascript
JS从数组中随机取出几个数组元素的方法
Aug 02 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
Sep 16 Javascript
详解Sea.js中Module.exports和exports的区别
Feb 12 Javascript
jQuery ajax动态生成table功能示例
Jun 14 jQuery
小程序获取周围IBeacon设备的方法
Oct 31 Javascript
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 Javascript
bootstrap paginator分页前后台用法示例
Jun 17 #Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
Jun 17 #Javascript
深入理解Webpack 中路径的配置
Jun 17 #Javascript
详解Vue组件之间的数据通信实例
Jun 17 #Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 #Javascript
webpack学习教程之publicPath路径问题详解
Jun 17 #Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
Jun 17 #Javascript
You might like
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
php使用GeoIP库实例
2014/06/27 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
PHP链表操作简单示例
2016/10/15 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
浅谈Node模块系统及其模式
2017/11/17 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
JS实现小米轮播图
2020/09/21 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
Python:slice与indices的用法
2019/11/25 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
纺织工程专业个人求职信范文
2014/01/27 职场文书
一年级数学教学反思
2014/02/01 职场文书
实习指导教师评语
2014/12/30 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
导游词之日月潭
2019/11/05 职场文书