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 相关文章推荐
Javascript的IE和Firefox兼容性汇编
Jul 01 Javascript
可实现多表单提交的javascript函数
Aug 01 Javascript
jquery ui dialog ie8出现滚动条的解决方法
Dec 06 Javascript
面向对象的Javascript之二(接口实现介绍)
Jan 27 Javascript
jquery 实现密码框的显示与隐藏示例代码
Sep 18 Javascript
jquery统计输入文字的个数并对其进行判断
Jan 07 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
May 05 Javascript
JS实现可关闭的对联广告效果代码
Sep 14 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
Jun 14 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
Jun 22 Javascript
深入理解vue Render函数
Jul 19 Javascript
使用微信SDK自定义分享的方法
Jul 03 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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
php可变长参数处理函数详解
2017/02/22 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
如何用js控制css中的float的代码
2007/08/16 Javascript
script标签的 charset 属性使用说明
2010/12/04 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
python3+PyQt5泛型委托详解
2018/04/24 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
自学考试自我鉴定范文
2013/09/26 职场文书
会计专业自我鉴定
2014/02/10 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
付款证明模板
2015/06/19 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL