Linux下用node.js提取Word(doc/docx)/PDF文本内容


发布者 kris  发布时间 1497519067670
关键字 JS学习  JavaScript 
想要做全文搜索引擎,则需要将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  等。

上述两个项目,略显复杂,我们也可以直接使用 unzip 模块,来提取docx/ xlst/ pptx 等存放内容的文件。请参考:

node.js使用unzip解压zip包指定文件,提取word/excel(docx/pptx/xlsx)文本内容










 热门文章 - 分享最多
  1. Node.js网页抓取:一个最简单的http请求客户端示例(request client)
  2. Docker改名Moby:急于商业化陷入品牌更名乱象
  3. Java已快过时?斯坦福大学将JavaScript作为计算机科学入门课
  4. Node.JS用Socket实现FTP Server服务器和Client客户端
  5. "永恒之蓝"比特币勒索病毒(WannaCry)的攻击原理
  6. Node.JS更改Windows注册表regedit的几种方法
  7. Phantom.js维护者Slobodin退出,著名自动化测试与智能爬虫框架前景不明
  8. Debian下设置Linux Shell脚本开机自动启动Node.JS进程
  9. 用纯Node.JS弹出Windows系统消息提示框(MessageBox)
  10. Node.JS如何调用Chrome打开浏览器链接地址

 相关阅读
  1. 用JavaScript获取当月第一天和最后一天
  2. Node.JSv8的5个新特性:支持string padding与async/await和object参数省略
  3. node.js中fs.stat里的atime,mtime,ctime,birthtime在debian下的更新规则与区别
  4. decodeURIComponent有个BUG,当浏览器请求地址含%+数字时,会解析错误
  5. NodeJS的DNS使用:域名解析,MX记录查询,SPF反垃圾邮件测试
  6. Node.JS如何调用Chrome打开浏览器链接地址
  7. 用纯Node.JS弹出Windows系统消息提示框(MessageBox)
  8. 利用Windows注册表将你的Node.JS程序添加到右健菜单直接运行
  9. JavaScript中splice与slice的区别、数组的复制以及在指定位置添加删除元素
  10. Node.JS中如何判断递归嵌套的所有回调函数已经执行完毕,以读取目录下所有文件为例:计数比Promise方式快将近一倍

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA