lucene에서 pdf를 text로 변환하는 소스다.
이렇게 text로 변환이 되어만 주면 lucene에서 indexing을 통해 해당 문서를 검색할 수 있다. 굿!!

이 소스는 aoJX 님이 공개해주셨다. 원래 소스에서 pdf를 읽는 경로를 인자로 받아 처리하는 부분만 조금 수정했다.
원래 소스의 경로는 이곳에 http://blog.naver.com/kgj1?Redirect=Log&logNo=108051492
이와 관련한 아파치 프로젝트인 pdfbox 가 있는데 그 프로젝트도 참고!!

package org.apache.lucene.demo;

import java.io.*;
import java.util.Arrays;

import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
//import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.util.PDFTextStripper;

public class PDFReader
{
    public static void main(String[] args)
    {
        if(args.length < 1)
        {
            System.out.println("arguments is not enough!!!");
            return;
        }
        //String fullPath = "/dev/eden/Doc/";
        String fullPath = args[0];
        System.out.println(fullPath + " PDF files parsing and converting TXT files.");

        File file = new File(fullPath);

        String[] files = file.list();                         // list its files
        Arrays.sort(files);                                   // sort the files
        for(int i=0; i<files.length; i++)                    // recursively index them
        {
            String fileName = files[i];
            if((new File(fullPath+fileName)).isDirectory()) continue;

            System.out.println(fileName);
            try
            {
                InputStream in = new FileInputStream(new File(fullPath+fileName));

                String text = null;
                PDFParser pdfp = new PDFParser(in);
                pdfp.parse();

                PDDocument pdd = pdfp.getPDDocument();
                COSDocument cos = pdfp.getDocument();
                PDFTextStripper pdfts = new PDFTextStripper();
                //PDDocumentInformation pddi = pdd.getDocumentInformation();

                pdfts.setLineSeparator("\n");
                pdfts.setWordSeparator(" ");

                text = pdfts.getText(pdd);

                cos.close();
                pdd.close();

                //BufferedWriter bw = new BufferedWriter(new FileWriter(fullPath+"txt/"+fileName.substring(0,fileName.length()-3)+"txt"));
                BufferedWriter bw = new BufferedWriter(new FileWriter(args[1]+fileName.substring(0,fileName.length()-3)+"txt"));

                bw.write(text);
                bw.close();
            }
            catch(Exception e)
            {
                System.out.println("error : " + e);
            }
        }
        System.out.println("finished! : " + (files.length-1) + " files created.");
    }
}



'Dev > search engine' 카테고리의 다른 글

search engine reference  (0) 2010.09.28
[펌] lucene 한글 형태소 분석기  (1) 2010.09.09
[펌] 검색엔진의 원리와 Lucene  (1) 2010.09.09
구글 검색엔진에 sitemap 등록하기  (2) 2010.08.14

+ Recent posts