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读取ASP设定的COOKIE
Nov 24 Javascript
jquery与prototype框架的详细对比
Nov 21 Javascript
ExtJS的拖拽效果示例
Dec 09 Javascript
详解JavaScript中undefined与null的区别
Mar 29 Javascript
利用jquery操作Radio方法小结
Oct 20 Javascript
AngularJS实现表单验证
Jan 28 Javascript
jQuery对象的链式操作用法分析
May 10 Javascript
AngularJS基础 ng-include 指令简单示例
Aug 01 Javascript
Javascript 跨域知识详细介绍
Oct 30 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
Mar 16 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
May 10 Javascript
Vue通过懒加载提升页面响应速度
May 10 Vue.js
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系统流量分析的程序
2006/10/09 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
很好用的js日历算法详细代码
2013/03/07 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
python实现多线程抓取知乎用户
2016/12/12 Python
简单了解Python中的几种函数
2017/11/03 Python
Python代码实现KNN算法
2017/12/20 Python
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
国际商务系学生个人的自我评价
2013/11/26 职场文书
关于爱情的广播稿
2014/01/16 职场文书
关于赌博的检讨书
2014/01/24 职场文书
三个儿子教学反思
2014/02/03 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
集体生日活动方案
2014/08/18 职场文书
中队活动总结
2014/08/27 职场文书
锦旗赠语
2015/06/23 职场文书
外出考察学习心得体会
2016/01/18 职场文书
详解Vue slot插槽
2021/11/20 Vue.js