java -PDFBox 如何从文档中提取文本而不存储在数组中?

夜魔侠

我正在使用 PDFBox 从 PDF 文档中提取文本。然后一次,提取,我将这些文本插入到 MySQL 的表中。

编码:

PDDocument document = PDDocument.load(new File(path1));

if (!document.isEncrypted()) {
    PDFTextStripper tStripper = new PDFTextStripper();
    String pdfFileInText = tStripper.getText(document);
    String lines[] = pdfFileInText.split("\\r?\\n");
    for (String line : lines) {
        String[] words = line.split(" ");

        String sql="insert IGNORE into  test.indextable values (?,?);";

        preparedStatement = con1.prepareStatement(sql);
        int i=0;
        for (String word : words) {
            // check if one or more special characters at end of string then remove OR
            // check special characters in beginning of the string then remove
            // insert every word directly to table db
            word=word.replaceAll("([\\W]+$)|(^[\\W]+)", "");
            preparedStatement.setString(1, path1);
            preparedStatement.setString(2, word);

            /* preparedStatement.executeUpdate();
            System.out.print("Add ");*/

            preparedStatement.addBatch();

            i++;
            if (i % 1000 == 0) {
                preparedStatement.executeBatch();

                System.out.print("Add Thousand");
            }
        }

        if (i > 0) {
            preparedStatement.executeBatch();

            System.out.print("Add Remaining");
        }
    }
}

代码工作正常,但正如您所看到的,如果文档很大并且里面有大约 1000 万个单词,那么它lines[]不会做任何正义,并且会抛出out of memory exception.

我想不出解决办法。有什么办法可以直接将单词提取并插入到数据库中,或者这是不可能的?

编辑:

这就是我所做的:

处理文本方法:

public void processText(String text) throws SQLException {

    String lines[] = text.split("\\r?\\n");
    for (String line : lines) {
        String[] words = line.split(" ");


        String sql="insert IGNORE into  test.indextable values (?,?);";


        preparedStatement = con1.prepareStatement(sql);
        int i=0;
        for (String word : words) {

            // check if one or more special characters at end of string then remove OR
            // check special characters in beginning of the string then remove
            // insert every word directly to table db
            word=word.replaceAll("([\\W]+$)|(^[\\W]+)", "");
            preparedStatement.setString(1, path1);
            preparedStatement.setString(2, word);



            preparedStatement.addBatch();

            i++;
            if (i % 1000 == 0) {
                preparedStatement.executeBatch();

                System.out.print("Add Thousand");
            }




        }




        if (i > 0) {
            preparedStatement.executeBatch();

            System.out.print("Add Remaining");

        }

    }
    preparedStatement.close();
    System.out.println("Successfully commited changes to the database!");

}

index 方法(调用上面的方法):

public void index() throws Exception {
       // Connection con1 = con.connect();
        try {

            // Connection con1=con.connect();
           // Connection con1 = con.connect();
            Statement statement = con1.createStatement();

            ResultSet rs = statement.executeQuery("select * from filequeue where Status='Active' LIMIT 5");


            while (rs.next()) {
                // get the filepath of the PDF document
                 path1 = rs.getString(2);
               int getNum = rs.getInt(1);
                // while running the process, update status : Processing
                //updateProcess_DB(getNum);
                Statement test = con1.createStatement();
                test.executeUpdate("update filequeue SET STATUS ='Processing' where UniqueID="+getNum);



                try {
                    // call the index function


                    /*Indexing process = new Indexing();

                    process.index(path1);*/

                    PDDocument document = PDDocument.load(new File(path1));

                    if (!document.isEncrypted()) {

                        PDFTextStripper tStripper = new PDFTextStripper();
                        for(int p=1; p<=document.getNumberOfPages();++p) {
                            tStripper.setStartPage(p);
                            tStripper.setEndPage(p);
                            String pdfFileInText = tStripper.getText(document);
                            processText(pdfFileInText);
                        }


                        }
蒂尔曼房东

您当前的代码使用pdfFileInText从中收集的字符串tStripper.getText(document);并立即获取整个文档。首先pdfFileInText.split在一个单独的方法中重构你对这个字符串(它以 开头所做的所有事情,例如processText. 然后将您的代码更改为:

PDFTextStripper tStripper = new PDFTextStripper();
for (int p = 1; p <= document.getNumberOfPages(); ++p)
{
    stripper.setStartPage(p); // 1-based
    stripper.setEndPage(p); // 1-based
    String pdfFileInText = tStripper.getText(document);
    processText(pdfFileInText);
}

新代码分别处理每个页面。通过这种方式,您将能够以更小的步骤进行数据库插入,而且您不必存储文档的所有单词,只需存储一页的单词。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java:Apache PDFbox提取突出显示的文本

来自分类Dev

用java旋转pdfbox中的文本

来自分类Dev

使用pdfbox库Java从PDF提取图像

来自分类Dev

用Java中的PDFbox替换或删除PDF中的文本

来自分类Dev

使用PDFbox从区域中提取文本

来自分类Dev

PDFbox异常-线程“主”中的异常java.lang.VerifyError

来自分类Dev

不能用java中的pdfbox计算工作广告字符

来自分类Dev

如何使用 Apache PDFBox 从按钮中提取标签文本?

来自分类Dev

如何使用PDFBox Java识别和删除PDF中的隐藏文本

来自分类Dev

在Java中使用pdfbox将文本覆盖到先前创建的pdf文档上

来自分类Dev

使用PDFBox提取便签

来自分类Dev

PDFBox文本提取-空输出

来自分类Dev

PDFBox加扰文本

来自分类Dev

如何使用pdfbox从pdf提取粗体文本?

来自分类Dev

PDFBox。Java:如何仅打印一页PDF而不是完整文档?

来自分类Dev

pdfbox:如何克隆页面

来自分类Dev

/ DA pdfbox。如何创建?

来自分类Dev

PDFBOX中的文本右对齐?

来自分类Dev

如何使用Java中的PDFBOX库查找pdf是纵向还是横向

来自分类Dev

如何用Java最好只用PdfBox替换pdf上的多个url中的一个

来自分类Dev

如何减少合并的PDF / A-1b的文件的大小与PDFBOX或其他java库

来自分类Dev

PDFbox Preflight PDF / A-1b检查在Java版本1.8中无法正常工作

来自分类Dev

Java PDFBox为PDF表单中的一些字段设置自定义字体

来自分类Dev

使用pdfBox在Java中创建尺寸为1700pixels * 2200pixels的pdf文件

来自分类Dev

PDFbox Preflight PDF / A-1b检查在Java版本1.8中无法正常工作

来自分类Dev

使用PDFBox 2.0从PDF提取文本

来自分类Dev

java pdfbox printerjob错误缩放/页面格式

来自分类Dev

PDFBox多重签名提供无效的签名Java

来自分类Dev

使用 java Apache PDFBOX 添加 HTML 标记

Related 相关文章

  1. 1

    Java:Apache PDFbox提取突出显示的文本

  2. 2

    用java旋转pdfbox中的文本

  3. 3

    使用pdfbox库Java从PDF提取图像

  4. 4

    用Java中的PDFbox替换或删除PDF中的文本

  5. 5

    使用PDFbox从区域中提取文本

  6. 6

    PDFbox异常-线程“主”中的异常java.lang.VerifyError

  7. 7

    不能用java中的pdfbox计算工作广告字符

  8. 8

    如何使用 Apache PDFBox 从按钮中提取标签文本?

  9. 9

    如何使用PDFBox Java识别和删除PDF中的隐藏文本

  10. 10

    在Java中使用pdfbox将文本覆盖到先前创建的pdf文档上

  11. 11

    使用PDFBox提取便签

  12. 12

    PDFBox文本提取-空输出

  13. 13

    PDFBox加扰文本

  14. 14

    如何使用pdfbox从pdf提取粗体文本?

  15. 15

    PDFBox。Java:如何仅打印一页PDF而不是完整文档?

  16. 16

    pdfbox:如何克隆页面

  17. 17

    / DA pdfbox。如何创建?

  18. 18

    PDFBOX中的文本右对齐?

  19. 19

    如何使用Java中的PDFBOX库查找pdf是纵向还是横向

  20. 20

    如何用Java最好只用PdfBox替换pdf上的多个url中的一个

  21. 21

    如何减少合并的PDF / A-1b的文件的大小与PDFBOX或其他java库

  22. 22

    PDFbox Preflight PDF / A-1b检查在Java版本1.8中无法正常工作

  23. 23

    Java PDFBox为PDF表单中的一些字段设置自定义字体

  24. 24

    使用pdfBox在Java中创建尺寸为1700pixels * 2200pixels的pdf文件

  25. 25

    PDFbox Preflight PDF / A-1b检查在Java版本1.8中无法正常工作

  26. 26

    使用PDFBox 2.0从PDF提取文本

  27. 27

    java pdfbox printerjob错误缩放/页面格式

  28. 28

    PDFBox多重签名提供无效的签名Java

  29. 29

    使用 java Apache PDFBOX 添加 HTML 标记

热门标签

归档