« CGLIB简介 | Main | NetBeans 6.5.1和Virtu... »
http://developers.sun.com.cn/blog/functionalca/date/20090330 星期一 2009年03月30日

基于tm-extractor的Word解析

作者:曹祺
Email:Qi.Cao@Sun.Com
Blog: http://blogs.sun.com/greysh  
难度:入门
源代码下载
 http://developers.sun.com.cn/blog/functionalca/resource/Greysh/FCA_Greysh_Word.zip  
原文链接:
http://developers.sun.com.cn/blog/functionalca/entry/%E5%9F%BA%E4%BA%8Etm_extractor%E7%9A%84word%E8%A7%A3%E6%9E%90

开发环境
Netbeans6.5
tm-extractors0.4版本不需要apachepoi包,因为里面已经整合了
tm-extractors1.0版本需要poi-3.0.1-FINAL-20070705.jar,版本一定要正确
tm-extractors官方网站
http://www.textmining.org/
SVN源代码:http://code.google.com/p/text-mining/source/browse/
Apache POI工程
http://poi.apache.org

简介
对于Javaword解析,主流方法是用中间件去访问,但是需要用JNI
Apache和微软合作,开发的POI,但是POI虽然功能强大,但是用起来也很麻烦
3.5版本和以前的3.0版本修改了很多,而且还没稳定下来。
对于一般的应用,例如类似QQ手机邮箱那样,仅仅只需要读出文本内容的话,我们可以直接用tm-extractors,当然它底层也是调用的Apache POI

 

Helloworld

对于0.4版本代码如下

package com.greysh.word;

/**

 * @author Genix.Cao

 */

import java.io.File;

import java.io.FileInputStream;

import org.textmining.text.extraction.WordExtractor;

public class WordUtils {

 public static String readDoc(String doc) throws Exception {

  FileInputStream in = new FileInputStream(new File(doc));

   WordExtractor extractor = new WordExtractor();

  String text = extractor.extractText(in);

  return text;

 }

 public static void main(String[] args) throws Exception {

         String text = WordUtils.readDoc("D:/1.doc");

         System.out.println(text);

 }

}

 

对于1.0版本

package com.greysh.word;

/**

 * @author Genix.Cao

 */

import java.io.File;

import java.io.FileInputStream;

import org.textmining.extraction.word.WordTextExtractorFactory;

public class WordUtils {

 

 public static String readDoc(String doc) throws Exception {

  FileInputStream in = new FileInputStream(new File(doc));

  WordTextExtractorFactory extractor = new WordTextExtractorFactory();

  String text = extractor.textExtractor(in).getText();

  return text;

 }

 public static void main(String[] args) {

        try{

         String text = WordUtils.readDoc("D:/1.doc");

         System.out.println(text);

        }catch(Exception ex){

         ex.printStackTrace();

        }

 }

}

 

注意:使用此代码的时候,记得修改word文件的路径和POI的版本

POI 3.5有些函数改变了,直接用会保异常

org.apache.poi.poifs.filesystem.POIFSFileSystem.getRoot()Lorg/apache/poi/poifs/filesystem/DirectoryEntry;

详情可以查看邮件列表

http://markmail.org/message/fla67r6kisrukom2#query:+page:1+mid:fla67r6kisrukom2+state:results(网址如果变了,请用邮件列表的搜索功能)

另外1.00.4相比,对于不同的Word版本有不同的策略,目前很多项目还是使用的0.4的版本

1.0采用的是LPGL的发布协议

得到文件流后用WordTextExtractorFactory去进行解析



发表于 Sun Functional 校园大使 [JavaEE] ( 三月 30, 2009 02:47 下午 ) Permalink | 评论[0]
评论:

发表一条评论:
  • HTML语法: 禁用