如何使用java从pdf文件中获取原始文本

2022-09-01 04:14:18

我有一些pdf文件,使用pdfbox,我已将它们转换为文本并存储为文本文件,现在从文本文件中要删除

  1. 超链接
  2. 所有特殊字符
  3. 空行
  4. pdf 文件的页眉页脚
  5. “1)”、“2)”、“a)”、“子弹”等

我想逐行获取有效的文本,如下所示:

我们提出了OntoGain,这是一种从纯文本中提取的多词概念术语中学习本体论的方法。OntoGain遵循由不同处理层引起的本体学习过程。在简单术语提取的基础上,通过对提取的概念进行聚类来形成con-cept层次结构。然后用非分类关系丰富衍生的术语分类法。已经检查了几种用于实现每一层的最先进的方法。OntoGain基于多词术语概念,因为多词或复合术语比普通的单词术语具有更坚实和独特的语义。我们选择了分层聚类方法和形式概念分析(FCA)算法来构建术语分类法。此外,还应用了关联规则算法来揭示非分类关系。还实现了一种尝试在关系的概念之间执行最合适的泛化级别的方法。为了展示概念证明,实现了一个系统原型。OntoGain允许使用Jena Semantic Web Frame-work将派生的本体转换为OWL1。OntoGain应用于两个独立的数据源,即医学和计算机语料库,其结果与Text2Onto获得的类似结果进行比较,Text2Onto是一种最先进的本体学习方法。对11.5 CCD1.1结果的分析表明,OntoGain在精度提取更正确的概念方面优于Text2Onto,同时更具选择性地提取更少但更合理的概念。

我怎样才能做到这一点?


答案 1

使用pdfbox,我们可以实现这一目标

例:

public static void main(String args[]) {

    PDFParser parser = null;
    PDDocument pdDoc = null;
    COSDocument cosDoc = null;
    PDFTextStripper pdfStripper;

    String parsedText;
    String fileName = "E:\\Files\\Small Files\\PDF\\JDBC.pdf";
    File file = new File(fileName);
    try {
        parser = new PDFParser(new FileInputStream(file));
        parser.parse();
        cosDoc = parser.getDocument();
        pdfStripper = new PDFTextStripper();
        pdDoc = new PDDocument(cosDoc);
        parsedText = pdfStripper.getText(pdDoc);
        System.out.println(parsedText.replaceAll("[^A-Za-z0-9. ]+", ""));
    } catch (Exception e) {
        e.printStackTrace();
        try {
            if (cosDoc != null)
                cosDoc.close();
            if (pdDoc != null)
                pdDoc.close();
        } catch (Exception e1) {
            e1.printStackTrace();
        }

    }
}

答案 2

嗨,我们可以使用Apache Tika提取pdf文件

示例如下:

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.TikaCoreProperties;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.sax.BodyContentHandler;

public class WebPagePdfExtractor {

    public Map<String, Object> processRecord(String url) {
        DefaultHttpClient httpclient = new DefaultHttpClient();
        Map<String, Object> map = new HashMap<String, Object>();
        try {
            HttpGet httpGet = new HttpGet(url);
            HttpResponse response = httpclient.execute(httpGet);
            HttpEntity entity = response.getEntity();
            InputStream input = null;
            if (entity != null) {
                try {
                    input = entity.getContent();
                    BodyContentHandler handler = new BodyContentHandler();
                    Metadata metadata = new Metadata();
                    AutoDetectParser parser = new AutoDetectParser();
                    ParseContext parseContext = new ParseContext();
                    parser.parse(input, handler, metadata, parseContext);
                    map.put("text", handler.toString().replaceAll("\n|\r|\t", " "));
                    map.put("title", metadata.get(TikaCoreProperties.TITLE));
                    map.put("pageCount", metadata.get("xmpTPg:NPages"));
                    map.put("status_code", response.getStatusLine().getStatusCode() + "");
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (input != null) {
                        try {
                            input.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return map;
    }

    public static void main(String arg[]) {
        WebPagePdfExtractor webPagePdfExtractor = new WebPagePdfExtractor();
        Map<String, Object> extractedMap = webPagePdfExtractor.processRecord("http://math.about.com/library/q20.pdf");
        System.out.println(extractedMap.get("text"));
    }

}

推荐