[java] Apache Tika 와 워드 클라우드 생성

Apache Tika는 텍스트, 이미지, 오디오 등 다양한 형식의 문서에서 정보를 추출하는 오픈 소스 라이브러리입니다. 이 라이브러리를 사용하여 문서에서 텍스트를 추출하고, 추출한 텍스트를 기반으로 워드 클라우드를 생성하는 방법을 알아보겠습니다.

Apache Tika 설치

Apache Tika를 사용하기 위해서는 먼저 Apache Tika 라이브러리를 설치해야 합니다. Maven을 사용한다면 pom.xml 파일에 아래 의존성을 추가합니다.

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>1.27</version>
</dependency>

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

implementation 'org.apache.tika:tika-core:1.27'

의존성을 추가한 뒤 프로젝트를 빌드하면 Apache Tika 라이브러리가 포함되게 됩니다.

텍스트 추출하기

Apache Tika를 사용하여 문서에서 텍스트를 추출하기 위해서는 Tika 클래스를 사용합니다. 아래 코드는 파일에서 텍스트를 추출하는 예제입니다.

import org.apache.tika.Tika;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class TextExtractor {
    public static void main(String[] args) {
        File file = new File("document.pdf");

        Tika tika = new Tika();
        String text;
        try (FileInputStream inputStream = new FileInputStream(file)) {
            text = tika.parseToString(inputStream);
            System.out.println(text);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드에서는 document.pdf 파일에서 텍스트를 추출하고, 추출한 텍스트를 콘솔에 출력합니다. 워드 클라우드 생성을 위해 추출한 텍스트를 변수에 저장해두는 것이 좋습니다.

워드 클라우드 생성하기

워드 클라우드를 생성하기 위해서는 Apache Tika와 함께 다른 라이브러리를 사용해야 합니다. 이 예제에서는 WordCloud라이브러리를 사용하여 워드 클라우드를 생성하는 방법을 알아보겠습니다.

먼저, WordCloud 라이브러리를 설치합니다. Maven을 사용한다면 pom.xml 파일에 아래 의존성을 추가합니다.

<dependency>
    <groupId>com.kennycason</groupId>
    <artifactId>wordcloud</artifactId>
    <version>1.4.0</version>
</dependency>

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

implementation 'com.kennycason:wordcloud:1.4.0'

의존성을 추가한 뒤 프로젝트를 빌드하면 WordCloud 라이브러리가 포함되게 됩니다.

다음은 Apache Tika를 사용하여 추출한 텍스트를 기반으로 워드 클라우드를 생성하는 예제 코드입니다.

import org.apache.tika.Tika;
import com.kennycason.wordcloud.DataFrequency;
import com.kennycason.wordcloud.WordCloud;
import com.kennycason.wordcloud.WordFrequency;
import com.kennycason.wordcloud.image.BackgroundColor;
import com.kennycason.wordcloud.image.WordCloudImage;
import com.kennycason.wordcloud.nlp.FrequencyAnalyzer;

import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;

public class WordCloudGenerator {
    public static void main(String[] args) {
        File file = new File("document.pdf");

        Tika tika = new Tika();
        String text;
        try (FileInputStream inputStream = new FileInputStream(file)) {
            text = tika.parseToString(inputStream);

            FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
            List<WordFrequency> wordFrequencies = frequencyAnalyzer.load(text);
            final Dimension dimension = new Dimension(600, 600);
            final WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);
            wordCloud.setPadding(2);
            wordCloud.setBackground(new BackgroundColor(Color.WHITE));

            for (final WordFrequency wordFrequency : wordFrequencies) {
                wordCloud.setColorPalette(new ColorPalette(Color.BLACK, Color.BLUE, Color.RED));
                wordCloud.setColorPalette(ColorPalette.createTransparentColorPalette(255, Color.GREEN));
                wordCloud.setColorPalette(ColorPalette.repeatingLinearGradient(
                        255, Color.RED, Color.BLUE, Color.GREEN));

                wordCloud.setWordResize(true);
                wordCloud.build(wordFrequencies);
                final WordCloudImage wordCloudImage = wordCloud.getWordCloudImage();
                wordCloudImage.writeToFile("wordcloud.png");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 예제 코드는 document.pdf 파일에서 텍스트를 추출하고, 추출한 텍스트를 WordCloud 라이브러리를 사용하여 워드 클라우드를 생성합니다. 최종 결과는 wordcloud.png 파일로 저장됩니다.

결론

Apache Tika와 WordCloud 라이브러리를 사용하면 문서에서 텍스트를 추출하고, 추출한 텍스트를 기반으로 워드 클라우드를 생성할 수 있습니다. 이를 통해 다양한 문서에서 텍스트를 시각화하여 정보를 파악할 수 있습니다.

참고 자료