- 浏览: 169037 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
hugang357:
...
java String to byte[] -
lyzhu:
winstr
使用JAVASCRIPT实现弹出框,过一段时间自动消失 -
laoliu.org:
要是稍微整理一下成一个健全类就更好了,呵呵。
我把它转到IT民 ...
java月份时间(第一天,最后一天) -
kaituozhe6666:
...
使用JAVASCRIPT实现弹出框,过一段时间自动消失 -
damocreazy:
试一试
如何让EditPlus可以编译执行Java程序
引用 :http://www.iteye.com/post/599330
各位好:在javaeye好长时间了,一直在各大网站学习各位的经验很感谢各位,目前我遇到一个关于lucene索引的问题,在国内和国外的网站上找了很久也没找到一个比较满意的解决办法,所以在这里想问问大家,希望有过这方面的经验的朋友给些帮助,最好能有些比较好的代码或可行性建议,我的代码大概如下
main方法主要是输入三个参数 第一个是转换文档的格式,第二个是文档存放的路径,第三个是要输出的文档存放的位置,
然后对输出的文档进行索引, 平均每个文档在1M-5M之间,
问题: 在进行文档转换的时候pdf,word,xls 都非常慢,本来想写一个threadpool来进行文档的转换,可是测试数据表明多线程转换还不如单线程的快,而且也容易出现outofmemory, 后来我又想了一个办法,把大的pdf ,word xls 进行切分,可是写了一个java的切分成小文档的方法,只能对txt文档进行转换,word 和pdf 因为里面有很多格式和样式的东西都是二进制的,在合成一个大的文档就合并不回去了(c++ 或.net 到时有办法切分),所以希望有过索引大量pdf ,word,xls 文档的朋友给写帮助,能快速处理, 目前的数据量大概是1T(大概是100G),服务器配置大概是4个cpu ,4G内存,虚拟机开到了1.2个G用的是jdk1.4在大也开不了了,谢谢帮助
各位好:在javaeye好长时间了,一直在各大网站学习各位的经验很感谢各位,目前我遇到一个关于lucene索引的问题,在国内和国外的网站上找了很久也没找到一个比较满意的解决办法,所以在这里想问问大家,希望有过这方面的经验的朋友给些帮助,最好能有些比较好的代码或可行性建议,我的代码大概如下
import com.messagesolution.message.viewer.util.HtmlDocument; import com.messagesolution.util.logger.Logger; import org.pdfbox.pdfparser.PDFParser; import org.pdfbox.util.PDFTextStripper; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.textmining.text.extraction.WordExtractor; import java.io.*; public class DocumentConverter { public static boolean convertPDF(String fromfile, String tofile) { PDFParser parser = null; String s = null; FileInputStream in = null; FileOutputStream fos = null; //BufferedOutputStream bos = null; DataOutputStream dos = null; try { try { PDFTextStripper _stripper = new PDFTextStripper(); in = new FileInputStream(new File(fromfile)); parser = new PDFParser(in); parser.parse(); s = _stripper.getText(parser.getDocument()); if (StringToolKit.isEmpty(s)){ Logger.getInstance().error("read string of pdf is empty"); return false; //nothing to write } } catch (Exception e) { Logger.getInstance().error("read pdf or convert it error"); e.printStackTrace(); return false; } try { //now write this string to a file fos = new FileOutputStream(new File(tofile)); //bos = new BufferedOutputStream(fos); //bos.write(s.getBytes()); //what about other language? dos = new DataOutputStream(fos); dos.writeBytes(s); } catch (Exception e) { Logger.getInstance().error("write converted txt error"); e.printStackTrace(); return false; } } catch (Throwable t) { if (t instanceof OutOfMemoryError) Logger.getInstance().fatal("OutOfMemoryError occurred in convertPDF for file: " + fromfile, t); System.err.println("Exception occurred in convertPDF, t: " + t); t.printStackTrace(); return false; //something wrong during the conversion } finally { try { if (parser != null) parser.getDocument().close(); if (in != null) in.close(); if (fos != null) fos.close(); //if (bos != null) // bos.close(); if (dos != null) dos.close(); } catch (Exception ex) { Logger.getInstance().error(ex.toString()); } } return true; } public static boolean convertDOC(String fromfile, String tofile) { FileInputStream fis = null; FileOutputStream fos = null; DataOutputStream dos = null; try { fis = new FileInputStream (new File(fromfile)); WordExtractor extractor = new WordExtractor(); String s = extractor.extractText(fis); //now write this string to a file fos = new FileOutputStream(new File(tofile)); //bos = new BufferedOutputStream(fos); //bos.write(s.getBytes()); //what about other language? dos = new DataOutputStream(fos); dos.writeBytes(s); } catch (Throwable t) { if (t instanceof OutOfMemoryError) Logger.getInstance().fatal("OutOfMemoryError occurred in convertDOC for file: " + fromfile, t); System.err.println("Exception occurred in convertDOC, t: " + t); t.printStackTrace(); return false; //something wrong during the conversion } finally { try { if (fis != null) fis.close(); if (fos != null) fos.close(); if (dos != null) dos.close(); } catch (Exception e) {} } return true; } public static boolean convertHTML(String fromfile, String tofile) { try { String htmlCharset = HtmlDocument.convertHtml(fromfile, tofile); System.out.println("htmlCharset: " + htmlCharset); } catch (Throwable t) { if (t instanceof OutOfMemoryError) Logger.getInstance().fatal("OutOfMemoryError occurred in convertHTML for file: " + fromfile, t); System.err.println("Exception occurred in convertHTML, t: " + t); t.printStackTrace(); return false; //something wrong during the conversion } return true; } public static boolean convertPPT(String fromfile, String tofile) { System.err.println("convertPPT not supported yet!"); Thread.dumpStack(); return false; // return false; } public static boolean convertXLS(String fromfile, String tofile) { StringBuffer sb = new StringBuffer(); FileInputStream fis = null; FileOutputStream fos = null; DataOutputStream dos = null; HSSFWorkbook wb = null; try { fis = new FileInputStream(new File(fromfile)); wb = new HSSFWorkbook(fis); int numSheets = wb.getNumberOfSheets(); for (int i=0;i<numSheets;++i) { HSSFSheet sheet = wb.getSheetAt(i); int numRows = sheet.getLastRowNum(); for (int j=0;j<numRows;++j) { HSSFRow row = sheet.getRow(j); if (row == null) continue; int numCells = row.getLastCellNum(); for (int k=0;k<numCells;++k) { HSSFCell cell = row.getCell((short)k); if(cell!=null) { int type = cell.getCellType(); if(type==HSSFCell.CELL_TYPE_STRING) { String str = cell.getStringCellValue(); str=str.trim(); str=replace(str,"\n",""); sb.append(str).append(" "); } } // We will ignore all other types - numbers, forumlas, etc. // as these don't hold alot of meaning outside of their tabular context. // else if(type==, CELL_TYPE_NUMERIC, CELL_TYPE_FORMULA, CELL_TYPE_BOOLEAN, CELL_TYPE_ERROR } // cells //sb.append("\n"); // break on each row } // rows sb.append("\n"); // break on each sheet } // sheets String s = sb.toString(); //now write this string to a file fos = new FileOutputStream(new File(tofile)); //bos = new BufferedOutputStream(fos); //bos.write(s.getBytes()); //what about other language? dos = new DataOutputStream(fos); dos.writeBytes(s); } catch (Throwable t) { if (t instanceof OutOfMemoryError) Logger.getInstance().fatal("OutOfMemoryError occurred in convertXSL for file: " + fromfile, t); System.err.println("Exception occurred in convertXSL, t: " + t); t.printStackTrace(); return false; //something wrong during the conversion } finally { try { if (fis != null) fis.close(); if (fos != null) fos.close(); if (dos != null) dos.close(); } catch (Exception e) {} } return true; } // This should really be made 'static' and moved into a utility class, // included here to simplify things private final static String replace(String line, String oldString, String newString) { if (line == null) { return null; } int i = 0; if ((i = line.indexOf(oldString, i)) >= 0) { char[] line2 = line.toCharArray(); char[] newString2 = newString.toCharArray(); int oLength = oldString.length(); StringBuffer buf = new StringBuffer(line2.length); buf.append(line2, 0, i).append(newString2); i += oLength; int j = i; while ((i = line.indexOf(oldString, i)) > 0) { buf.append(line2, j, i - j).append(newString2); i += oLength; j = i; } buf.append(line2, j, line2.length - j); return buf.toString(); } return line; } public static void main(String[] args) { int index = 0; String action = args[index++]; String f1 = args[index++]; String f2 = args[index++]; long start = System.currentTimeMillis(); long end = 0; if (action.equals("pdf")) convertPDF(f1, f2); else if (action.equals("doc")) convertDOC(f1, f2); else if (action.equals("xls")) convertXLS(f1, f2); else if (action.equals("ppt")) convertPPT(f1, f2); else if (action.equals("ppt")) convertHTML(f1, f2); end = System.currentTimeMillis(); System.out.println(action + " convert " + f1 + " took " + ((end-start)/1000) + " seconds."); } }
main方法主要是输入三个参数 第一个是转换文档的格式,第二个是文档存放的路径,第三个是要输出的文档存放的位置,
然后对输出的文档进行索引, 平均每个文档在1M-5M之间,
问题: 在进行文档转换的时候pdf,word,xls 都非常慢,本来想写一个threadpool来进行文档的转换,可是测试数据表明多线程转换还不如单线程的快,而且也容易出现outofmemory, 后来我又想了一个办法,把大的pdf ,word xls 进行切分,可是写了一个java的切分成小文档的方法,只能对txt文档进行转换,word 和pdf 因为里面有很多格式和样式的东西都是二进制的,在合成一个大的文档就合并不回去了(c++ 或.net 到时有办法切分),所以希望有过索引大量pdf ,word,xls 文档的朋友给写帮助,能快速处理, 目前的数据量大概是1T(大概是100G),服务器配置大概是4个cpu ,4G内存,虚拟机开到了1.2个G用的是jdk1.4在大也开不了了,谢谢帮助
发表评论
-
java调用google map api 根据经纬度读取经纬度地址
2012-02-28 08:42 2776package B7.general; import ... -
java 读取http url joson 格式
2012-02-28 08:39 1131URL url = new URL("htt ... -
【转】用Lucene的SpellChecker实现Google的“您是不是要找”功能
2011-03-25 11:01 1421引言 很多人在使用搜索引擎的时候,会出于各种原因,拼错想要搜 ... -
Java 接口和抽象类区别
2011-03-02 08:58 569一个软件设计的好坏, ... -
php 环境搭建
2009-06-17 17:25 1085想学习php。在网上找了个搭建。好多杂的。google一下时间 ... -
abstract class vc interface
2008-12-10 16:24 1411abstract class 和 interface 都提供可 ... -
二分查找vc线性查找
2008-12-10 14:32 1018public static int binarySearch( ... -
java 取字符串中汉字之前的部门
2008-09-03 17:28 1035String dd="ddfdf你好" ... -
java 数组 操作
2008-08-21 17:30 1031public ArrayList zuhe(){ ... -
查询代码网站
2008-08-17 15:55 740<search terms> Search fo ... -
java String to byte[]
2008-07-16 09:01 4422package mobile; /* * T ... -
java月份时间(第一天,最后一天)
2008-06-13 20:57 7017<% //当前月的最后一天 ... -
java中文件操作大全
2008-05-08 18:07 950引用: http://www.pben.cn/main.bb ... -
较好的Java网站收集
2008-04-25 14:19 935转自:http://blog.chinaunix. ... -
java 自定义排序
2008-04-21 10:21 2001利用java.util. Comparator接口 和java ... -
2008年Java开发者最迫切的五个期望
2008-03-29 11:28 1189发布日期:2008-1-11 9:11 ... -
Java精华积累:每个初学者都应该搞懂的问题!
2008-03-07 13:20 1019Java精华积累:每个初学 ... -
如何让EditPlus可以编译执行Java程序
2008-02-13 10:51 1709如何让EditPlus可以编译执行Java程序在 USER T ... -
阴阳转换的类! 算法支持1900-2050
2008-02-13 10:49 1266引自: http://www.nqqn.com/ym/68/2 ... -
整理了sun网站java环境下获取网卡信息的资料
2008-02-13 10:14 1551引自:http://www.nqqn.com/ym/68/29 ...
相关推荐
JAVA PDF從0開始學習哦JAVA PDF從0開始學習哦JAVA PDF從0開始學習哦JAVA PDF從0開始學習哦JAVA PDF從0開始學習哦
java pdf合并实例,里面包含的有iText.jar包。本来是自己有需要,写的一个例子。有需要的可以看一下。
java PDF关键字定位,所用jar为itextpdf-5.5.6.jar,jar自己去下载,这里只提供定位方式
java pdf 实现电子签章,包含两种实现itextpdf,pdfbox.
基于apache pdfbox库实现Java PDF转图片,带源码和pom文件; 开发环境导入maven工程,PdfToImg为测试类,修改其中test.pdf和test.png的路径即可运行; PDFUtil为独立工具类,可放置任何工程中运行。 如果在linux...
1.功能:该API为适用于Java平台下,通过后端程序代码调用API接口操作PDF文档,可实现如下功能: 1.1 文档转换:PDF转图片/Word/SVG/XPS/HTML/XPS/TIFF、图片转PDF 1.2 文档操作:文档创建、合并、拆分、压缩、复制...
Free Spire.PDF for JAVA 是一个 100% 免费的 PDF API, 在 JAVA 应用程序上调用该组件即可读取,写入和保存 PDF 文档,无需安装 Adobe Acrobat。使用此 JAVA PDF 组件,开发人员可以在 JAVA 应用程序(J2SE 和 J2EE...
head first java 深入浅出java pdf版
java Pdf 导出 中文 解决 jar 包 ,包括实例代码
java使用itext对PDF进行水印生成。包括:java创建PDF文档,java对PDF进行加水印。源码实例下载即可运行。
java pdf基础资料java pdf基础资料java pdf基础资料
21天学会java pdf格式的书 相当不错的书
java PDF Aspose.Pdf 生成 java PDF Aspose.Pdf 生成 java PDF Aspose.Pdf 生成
Java web 打印,Java pdf打印,Java打印
PDF转换图片(多页转多张) java实现多页PDF转换多张图片
java pdf转swf,最后在页面显示实例(类似百度文库)
java工程 pdf转图片 可指定转换某一页
java解析PDF格式的文件demo。JAVA实现PDF解析,对PDF文件中的文本内容可输出仅供参考学习,不喜勿喷。
疯狂java