2015. 3. 22. 13:17

▶ Apache Tika 예제 테스트

  • 다양한 문서에서 메타 정보와 컨텐츠를 추출하기 위해 사용할 수 있는 유용한 라이브러리는 아파치 Tika이다.
  • Docar 프로젝트에 Tika를 적용을 위한 사전 검증으로서 프로젝트 환경 설정 및 예제 테스트를 수행한다.

▶ 프로젝트 환경 설정 및 예제 작성

  • Maven 환경 설정
    : 프로젝트 내에서 Tika를 사용하기 위해 의존성(dependencies)을 설정한다. 2015년 3월 기준, 아파치 Tika의 최신 버전은 1.7 이다.

     	<!-- [end] 아파치 Tika 라이브러리 -->
      <properties>
     	<tika.version>1.7</tika.version>
      </properties>
    
            <!-- [start] 아파치 Tika 라이브러리 -->  	
     	<dependency>
     		<groupId>org.apache.tika</groupId>
     		<artifactId>tika-core</artifactId>
     		<version>${tika.version}</version>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.tika</groupId>
     		<artifactId>tika-parsers</artifactId>
     		<version>${tika.version}</version>
     	</dependency>
    


  • 예제 코드 작성
    : MS Word 문서 파일 읽어들여, 메타 데이터를 검출하고 컨텐츠를 추출하는 예제는 다음과 같다.

    package docar.archive.extraction;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import org.apache.tika.exception.TikaException;
    import org.apache.tika.metadata.Metadata;
    import org.apache.tika.parser.AutoDetectParser;
    import org.apache.tika.parser.ParseContext;
    import org.apache.tika.parser.Parser;
    import org.apache.tika.sax.BodyContentHandler;
    import org.xml.sax.SAXException;
    
    public class AutoDetectionExample {
    	public static void main(final String[] args) throws IOException,
    			SAXException, TikaException {
    		Parser parser = new AutoDetectParser();
    
    		System.out.println("------------ Parsing an Office Document:");
    		extractFromFile(parser, "/demo.doc");
    	}
    
    	private static void extractFromFile(final Parser parser,
    			final String fileName) throws IOException, SAXException,
    			TikaException {
    		long start = System.currentTimeMillis();
    		BodyContentHandler handler = new BodyContentHandler(10000000);
    		Metadata metadata = new Metadata();
    		InputStream content = AutoDetectionExample.class
    				.getResourceAsStream(fileName);
    		parser.parse(content, handler, metadata, new ParseContext());
    		for (String name : metadata.names()) {
    			System.out.println(name + ":\t" + metadata.get(name));
    		}
    		System.out.println(String.format(
    				"------------ Processing took %s millis\n\n",
    				System.currentTimeMillis() - start));
    		System.out.println("------------ content of document\n" + handler.toString());
    	}
    }
    


▶ 추가 고려 사항

  • 다양한 문서 형식에서 추출할 수 있는 메타 데이터에서 '문서관리 시스템'에서 활용할 수 있는 유용한 후보(candidates)들은 다음과 같다. : "Content-Type", "Author", "Last-Modified", "Creation-Date", "title"
  • "Content-Type" : 파일 형식 별 검색을 위해 필요한 정보이므로 필수 항목이다.
  • "Author" : "작성자" 혹은 "저자" 정보는 MS-Office 등의 문서 형식에서 부정확한 경우가 많다. 예를 들어 타인이 작성한 문서를 복사 및 편집한 후 저장한 문서일 경우에는 원래 파일의 작성자 정보만이 남아 있게 된다. 따라서, 부수적인 정보로 취급해야 한다.
  • "Creation-Date" : 문서의 생성일자는 특정 기간에 생성된 문서를 검색하는데 유용한 정보이다.
  • "Last-Modified" : 문서의 최종 변경일자는 버전 관리를 위해 필요한 정보이다. 문서 저장소에 저장된 파일과 입력된 파일을 비교해서 입력된 파일의 변경일자가 저장소의 파일보다 나중인 경우에는 새로운 버전으로 문서 저장소에 추가해야 한다.
  • "title" : 제목 또한 부정확한 정보가 될 수 있다. 앞서 작성자 정보와 마찬가지로 복사한 파일을 편집한 후에 저장하면 이전 작성자의 정보가 그대로 남아있게 된다.

▶ 참조 링크 및 이클립스 프로젝트 (소스 다운로드)


Posted by 곽중선