[java] Apache Tika 와 데이터베이스 통합

Apache Tika는 자바 기반의 오픈 소스 라이브러리로, 다양한 문서 형식에서 텍스트를 추출하는 기능을 제공합니다. 이 라이브러리는 워드 문서, PDF, HTML, XML 등 다양한 형식의 문서에서 텍스트를 추출하여 애플리케이션에 활용할 수 있습니다.

이번 포스트에서는 Apache Tika를 사용하여 문서의 텍스트를 추출한 후, 추출된 텍스트를 데이터베이스에 저장하는 방법에 대해 알아보겠습니다.

Apache Tika 설치

Apache Tika를 사용하기 위해 먼저 해당 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용한다면, pom.xml 파일에 다음 의존성을 추가합니다.

<dependencies>
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-core</artifactId>
        <version>1.24.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers</artifactId>
        <version>1.24.1</version>
    </dependency>
</dependencies>

Gradle을 사용한다면, build.gradle 파일에 다음 의존성을 추가합니다.

dependencies {
    implementation 'org.apache.tika:tika-core:1.24.1'
    implementation 'org.apache.tika:tika-parsers:1.24.1'
}

의존성을 추가한 후에는 프로젝트를 빌드해야 합니다.

문서 텍스트 추출하기

Apache Tika를 사용하여 문서의 텍스트를 추출하는 예제 코드는 다음과 같습니다.

import org.apache.tika.Tika;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class DocumentTextExtractor {
    public static void main(String[] args) {
        // 추출할 문서 파일 경로
        String filePath = "/path/to/document.docx";

        // Tika 객체 생성
        Tika tika = new Tika();

        try {
            // 문서 파일 읽기
            File file = new File(filePath);
            InputStream inputStream = new FileInputStream(file);

            // 문서 텍스트 추출
            String text = tika.parseToString(inputStream);

            // 추출된 텍스트 출력
            System.out.println(text);

            // 데이터베이스에 텍스트 저장하는 로직 추가
            // ...

            // 입력 스트림 닫기
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위의 예제 코드에서는 문서 파일의 경로를 지정한 후, Tika 객체를 생성하고 해당 파일을 읽은 뒤, parseToString 메소드를 사용하여 문서의 텍스트를 추출합니다. 추출된 텍스트는 출력되는데, 원하는 경우 데이터베이스에 저장하는 로직을 추가할 수 있습니다.

데이터베이스에 텍스트 저장하기

추출된 텍스트를 데이터베이스에 저장하기 위해서는 해당 데이터베이스에 맞는 JDBC 드라이버가 필요합니다. 드라이버를 프로젝트에 추가한 후, JDBC를 사용하여 데이터베이스에 텍스트를 저장하는 로직을 작성하면 됩니다.

아래는 MySQL을 사용하는 예제 코드입니다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class DatabaseTextSaver {
    public static void main(String[] args) {
        // MySQL 데이터베이스 연결 정보 설정
        String url = "jdbc:mysql://localhost:3306/database";
        String username = "username";
        String password = "password";

        try {
            // JDBC 드라이버 로드
            Class.forName("com.mysql.jdbc.Driver");

            // 데이터베이스 연결
            Connection connection = DriverManager.getConnection(url, username, password);

            // 데이터 삽입 쿼리 작성
            String insertQuery = "INSERT INTO documents (text) VALUES (?)";

            // 문서 텍스트
            String text = "Extracted document text goes here";

            // PreparedStatement 생성
            PreparedStatement statement = connection.prepareStatement(insertQuery);

            // 파라미터 설정
            statement.setString(1, text);

            // 데이터 삽입 실행
            statement.executeUpdate();

            // 자원 해제
            statement.close();
            connection.close();

            System.out.println("텍스트가 데이터베이스에 저장되었습니다.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위의 예제 코드에서는 url, username, password를 각각 MySQL 데이터베이스 URL, 사용자 이름, 비밀번호에 맞게 설정하고, text 변수에 추출된 텍스트를 할당합니다. 그 후 데이터 삽입을 위한 쿼리를 작성하고 해당 쿼리의 파라미터로 추출된 텍스트를 설정하여 데이터베이스에 저장합니다.