'DocAr/Extraction'에 해당되는 글 2건

  1. 2015.03.22 Apache Tika 예제 테스트
  2. 2015.03.19 Apache Tika 소개
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 곽중선
2015. 3. 19. 18:19

Apache Tika 개요

  • 아파치 Tika는 문서 타입 검출 및 다양한 파일 형식에서 컨텐츠를 추출하는 기능을 제공하는 라이브러리이다.
  • 내부적으로, Tika는 현존하는 다양한 문서 파서(parse)들과 문서 타입 검출 및 데이터를 추출하는 기법들을 활용하고 있다.
  • Tika를 활용해 광범위한(universal) 타입 검출기 및 스프레드 시트, 텍스트 문서, 이미지, PDF 및 멀티미디어 입력 포맷 등의 다양한 형식의 문서에서 구조화된 텍스트와 메타 데이터를 추출할 수 있는 컨텐츠 추출기를 제작할 수 있다.
  • Tika는 다양한 파일 형식을 파싱(parsing)할 수 있는 단일 범용 API를 제공한다. 각각의 문서 타입을 처리하기 위해 83가지 전문화된 파서(parser) 라이브러리를 사용한다.
  • 이러한 파서 라이브리들은 Parser 인터페이스라는 단일 인터페이스 내에 캡슐화 되어 있다.


왜 Tika를 써야 하는가?

filext.com 에 따르면 1,5000 에서 51000 가지의 컨텐츠 타입이 존재하는 것으로 추정되며, 이러한 수치는 날마다 증가하고 있다. 데이터 텍스트 문서, 엑셀 스프레드 시트, PDF, 이미지, 멀티미디어 등 다양한 형식으로 저장 되어지고 있다. 따라서, 검색엔진과 컨텐츠 관리 시스템 등의 어플리케이션은 다양한 문서 타입에서 손쉽게 데이터를 추출할 수 있는 기능을 필요로 한다. Apache Tika는 다양한 파일 형식에서 데이터를 찾아내고 추출하는 범용적인 API를 제공하기 위해 만들어 졌다.


Apache Tika 어플리케이션들

다양한 어플리케이션들을 Tika를 이용해 만들 수 있다.


검색 엔진(Search Engine)

Tika는 검색 엔진이 디지털 문서들의 텍스트 컨텐츠를 색인하는데 사용된다.


문서 분석(Document Analysis)

인공 지능 분야에서는 문서를 자동으로 의미론(semantic)적으로 분석하고, 모든 유형의 데이터를 추출하는 도구들이 있다.

이러한 어플리케이션에서는 문서에서 추출된 컨텐츠에 포함된 중요한 용어들을 기반으로 문서들이 저절로 분류된다.

이러한 도구들에서 Tica는 문서를 분석하기 위해 컨텐츠를 추출하는 기능을 수행한다.


디지털 자산 관리 (Digital Asset Management)

어떤 기관들은 사진, e-book, 음악, 설계도, 그림, 비디오 등의 디지털 자산을 관리하는 특별한 어플리케이션을 사용하는데 이를 디지털 자산 관리 시스템이라고 부른다.

이러한 어플리케이션에서 문서의 타입 검출 기능과 다양한 문서들을 분류하기 위한 메타 데이터 추출기를 사용한다.


컨텐츠 분석(Contents Analysis)

Amazon 같은 웹 사이트들은 고객들의 관심사에 기반한 맞춤형 컨텐츠를 제공한다. 이렇게 하기 위해, 머신 러닝(machine learning) 기술을 적용하거나, Facebook 같은 소셜 미디어 네트워크의 도움을 받아 사용자의 기호(interest)와 좋아하는 것들에 대한 정보를 수집한다. 이렇게 수집된 정보들은 HTML와 그외의 다양한 형식으로 존재하며, 컨텐츠 타입 검출 및 추출 과정을 거치게 된다.

문서의 컨텐츠를 분석하기 위해 UIMA 및 Mahout 같은 머신 러닝 기술이 활용된다. 이러한 기술들은 문서의 데이터를 클러스터링하고 분석하는데 쓰인다.

Apache Mahout는 Apache Hadoop 위에서 Machine Learning 알고리즘을 제공하는 프레임워크이다. Mahout은 클러스터링 및 필터링 기술을 제공하며, 프로그래머들은 자신만의 고유한 ML 알고리즘을 이용해 다양한 텍스트와 메타데이터 조합을 이용해 추천 정보를 생산할 수 있게 된다. 최근 버전의 Mahout은 ML을 위한 입력 데이터를 생성하기 위해 Tika를 이용하고 있다.

Apache UIMA 는 다양한 프로그래밍 언어를 분석하고 처리하고, UIMA 어노테이션(annotations)을 생성한다. 내부적으로 Tika Annotator를 문서의 텍스트와 메타 데이터를 추출하기 위해 사용한다.


출처 : http://www.tutorialspoint.com/tika/tika_quick_guide.htm

Posted by 곽중선