JavaでPDFから文章を抽出
プログラム上からPDFの文章を取り出したいと思うことがあったので、方法を調べてみた。
PDFBoxというツールを使うと結構いい感じに抽出できた。
以下に簡単なサンプルプログラムを示す。
import java.io.*; import org.apache.pdfbox.pdfparser.PDFParser; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.util.PDFTextStripper; public class ExtractPDF { private static String extractText(String filePath) throws FileNotFoundException, IOException { FileInputStream pdfStream = new FileInputStream(filePath); PDFParser parser = new PDFParser(pdfStream); parser.parse(); PDDocument pdf = parser.getPDDocument(); PDFTextStripper stripper = new PDFTextStripper(); ByteArrayOutputStream out = new ByteArrayOutputStream(); stripper.writeText(pdf, new BufferedWriter(new OutputStreamWriter(out))); return out.toString(); } public static void main(String[] args) throws Exception { String pdfFile = "test.pdf"; String data = extractText(pdfFile); System.out.println(data); } }
手元の適当な論文に対する出力結果
Online EM for Unsupervised Models Percy Liang Dan Klein Computer Science Division, EECS Department University of California at Berkeley Berkeley, CA 94720 fpliang,kleing@cs.berkeley.edu Abstract The (batch) EM algorithm plays an important role in unsupervised induction, but it some- (中略) EM sEM‘ EM sEM‘ POS 56:2 1:36 58:8 0:73; 1:41 6:01 6:09 DOC 41:2 1:97 51:4 0:97; 2:82 7:93 7:88 SEG(en) 80:5 0:0 81:0 0:0; 0:42 4:1 4:1 SEG(ch) 78:2 0:0 77:2 0:0; 0:04 7:26 7:27 ALIGN 79:0 0:14 78:8 0:14; 0:25 5:04 5:11 Table 2: Mean and standard deviation over different ran- dom seeds. For EM and sEM, the first number after (以下略)
参考
残念ながら日本語のPDFには対応してないようですが、パッチを当てれば読める場合もあるようです